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加双引号是错的? 求大神解答!
展开
 我来答
longrenyingdc8ecb1
2015-11-08 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2298万
展开全部
单引号在过程中有一个原则那就是找最近的,不找最合适的,因为过程没办法判断哪个合适。
就拿上面你的问题来说。
'v_prodt_row('test1')=',程序认为的单引号分别是'v_prodt_row(' 和')=',过程编译过程中,不会“从外往内找配对”而是“从前往后找配对”。当然,事无绝对,有一种比较特殊的用法,我记得不是很全了,下面会大概说一说。
在说说双引号的问题,个人认为可以这么理解:这个符号sql不认识。其实不能说不认识,只是说没有一个明确的定义什么时候用(大部分人包括我,认为是在引用的时候能用,能把变量和文字区分开,着大概算一个功能吧)
比如,如果你用dbms_metadata.get_ddl查询出来的建表语句,所有字段几乎都有双引号,可是如果你直接复制语句建表,可能又会报错误,问题就出在双引号上(这里不是用工具建表,工具有些是有处理功能的,我说的是sqlplus这种直接的命令行模式)。
所以双引号,个人建议尽量少用,有时用错了都不知道问题出在哪(我碰到过,不止一次)。
单引号的特殊用法:在有些情况下,单引号可以转义单引号,大概情况是你可能在语句中发现'''(三个单引号),''''(四个单引号)的情况。
比如利用过程向一张表内插入数据,其他的要么是字段,要么是变量,但是有一个是固定的值,比如AAA,但是直接写select AAA from table,会报没有这个字段,你要查询出来只能写select 'AAA' from table.也就是说这个AAA, 外面必须有单引号,那么就回出现类似('''AAA''')的写法,具体怎么用我就不误导(其实不是误导,有这种情况我会写,可是说不那么明白)你了,碰到实际的应用再说吧。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式