oracle 11g 中的双引号和单引号的问题
DECLARETYPEprodt_tab_thdISTABLEofNUMBER(10)INDEXBYVARCHAR2(20);v_prodt_rowprodt_tab_t...
DECLARE
TYPE prodt_tab_thd IS TABLE of NUMBER(10)
INDEX BY VARCHAR2(20);
v_prodt_row prodt_tab_thd;
BEGIN
v_prodt_row('test1') := 123;
v_prodt_row('test') := 0;
DBMS_OUTPUT.PUT_LINE('v_prodt_row(111)=' || v_prodt_row('test1')); --????????
DBMS_OUTPUT.PUT_LINE('v_prodt_row(0)=' || v_prodt_row('test'));
为什么上面的输出语句中'v_prodt_row(111)='换成'v_prodt_row('test1')='就报错,而换成'v_prodt_row("test1")='就对了,为什么赋值语句中的test1加双引号是错的? 求大神解答! 展开
TYPE prodt_tab_thd IS TABLE of NUMBER(10)
INDEX BY VARCHAR2(20);
v_prodt_row prodt_tab_thd;
BEGIN
v_prodt_row('test1') := 123;
v_prodt_row('test') := 0;
DBMS_OUTPUT.PUT_LINE('v_prodt_row(111)=' || v_prodt_row('test1')); --????????
DBMS_OUTPUT.PUT_LINE('v_prodt_row(0)=' || v_prodt_row('test'));
为什么上面的输出语句中'v_prodt_row(111)='换成'v_prodt_row('test1')='就报错,而换成'v_prodt_row("test1")='就对了,为什么赋值语句中的test1加双引号是错的? 求大神解答! 展开
展开全部
单引号在过程中有一个原则那就是找最近的,不找最合适的,因为过程没办法判断哪个合适。
就拿上面你的问题来说。
'v_prodt_row('test1')=',程序认为的单引号分别是'v_prodt_row(' 和')=',过程编译过程中,不会“从外往内找配对”而是“从前往后找配对”。当然,事无绝对,有一种比较特殊的用法,我记得不是很全了,下面会大概说一说。
在说说双引号的问题,个人认为可以这么理解:这个符号sql不认识。其实不能说不认识,只是说没有一个明确的定义什么时候用(大部分人包括我,认为是在引用的时候能用,能把变量和文字区分开,着大概算一个功能吧)
比如,如果你用dbms_metadata.get_ddl查询出来的建表语句,所有字段几乎都有双引号,可是如果你直接复制语句建表,可能又会报错误,问题就出在双引号上(这里不是用工具建表,工具有些是有处理功能的,我说的是sqlplus这种直接的命令行模式)。
所以双引号,个人建议尽量少用,有时用错了都不知道问题出在哪(我碰到过,不止一次)。
单引号的特殊用法:在有些情况下,单引号可以转义单引号,大概情况是你可能在语句中发现'''(三个单引号),''''(四个单引号)的情况。
比如利用过程向一张表内插入数据,其他的要么是字段,要么是变量,但是有一个是固定的值,比如AAA,但是直接写select AAA from table,会报没有这个字段,你要查询出来只能写select 'AAA' from table.也就是说这个AAA, 外面必须有单引号,那么就回出现类似('''AAA''')的写法,具体怎么用我就不误导(其实不是误导,有这种情况我会写,可是说不那么明白)你了,碰到实际的应用再说吧。
就拿上面你的问题来说。
'v_prodt_row('test1')=',程序认为的单引号分别是'v_prodt_row(' 和')=',过程编译过程中,不会“从外往内找配对”而是“从前往后找配对”。当然,事无绝对,有一种比较特殊的用法,我记得不是很全了,下面会大概说一说。
在说说双引号的问题,个人认为可以这么理解:这个符号sql不认识。其实不能说不认识,只是说没有一个明确的定义什么时候用(大部分人包括我,认为是在引用的时候能用,能把变量和文字区分开,着大概算一个功能吧)
比如,如果你用dbms_metadata.get_ddl查询出来的建表语句,所有字段几乎都有双引号,可是如果你直接复制语句建表,可能又会报错误,问题就出在双引号上(这里不是用工具建表,工具有些是有处理功能的,我说的是sqlplus这种直接的命令行模式)。
所以双引号,个人建议尽量少用,有时用错了都不知道问题出在哪(我碰到过,不止一次)。
单引号的特殊用法:在有些情况下,单引号可以转义单引号,大概情况是你可能在语句中发现'''(三个单引号),''''(四个单引号)的情况。
比如利用过程向一张表内插入数据,其他的要么是字段,要么是变量,但是有一个是固定的值,比如AAA,但是直接写select AAA from table,会报没有这个字段,你要查询出来只能写select 'AAA' from table.也就是说这个AAA, 外面必须有单引号,那么就回出现类似('''AAA''')的写法,具体怎么用我就不误导(其实不是误导,有这种情况我会写,可是说不那么明白)你了,碰到实际的应用再说吧。
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询