oracle 11g 中的双引号和单引号的问题

2024-11-30 00:51:17
推荐回答(1个)
回答1:

单引号在过程中有一个原则那就是找最近的,不找最合适的,因为过程没办法判断哪个合适。
就拿上面你的问题来说。
'v_prodt_row('test1')=',程序认为的单引号分别是'v_prodt_row(' 和')=',过程编译过程中,不会“从外往内找配对”而是“从前往后找配对”。当然,事无绝对,有一种比较特殊的用法,我记得不是很全了,下面会大概说一说。
在说说双引号的问题,个人认为可以这么理解:这个符号sql不认识。其实不能说不认识,只是说没有一个明确的定义什么时候用(大部分人包括我,认为是在引用的时候能用,能把变量和文字区分开,着大概算一个功能吧)
比如,如果你用dbms_metadata.get_ddl查询出来的建表语句,所有字段几乎都有双引号,可是如果你直接复制语句建表,可能又会报错误,问题就出在双引号上(这里不是用工具建表,工具有些是有处理功能的,我说的是sqlplus这种直接的命令行模式)。
所以双引号,个人建议尽量少用,有时用错了都不知道问题出在哪(我碰到过,不止一次)。
单引号的特殊用法:在有些情况下,单引号可以转义单引号,大概情况是你可能在语句中发现'''(三个单引号),''''(四个单引号)的情况。
比如利用过程向一张表内插入数据,其他的要么是字段,要么是变量,但是有一个是固定的值,比如AAA,但是直接写select AAA from table,会报没有这个字段,你要查询出来只能写select 'AAA' from table.也就是说这个AAA, 外面必须有单引号,那么就回出现类似('''AAA''')的写法,具体怎么用我就不误导(其实不是误导,有这种情况我会写,可是说不那么明白)你了,碰到实际的应用再说吧。