Oracle单引号双重角色——字符串引用与转义

单引号双重角色——字符串引用与转义 
 
  在ORACLE中,单引号有两个做用,一是字符串是由单引号引用,二是转义,开始学习时动态构成SQL时常常不解。单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对很差理解。
  一、从第二个单引号开始被视为转义符,若是第二个单引号后面还有单引号(哪怕只有一个)。
学习

SQL> SELECT '''' FROM DUAL;
 
''
--
'
 
为了证明结果是被第二个单引号转义的第三个单引号(既:SELECT '''' FROM DUAL;),咱们作以下两个测试:
 
SQL> SELECT ''' FROM DUAL;
ERROR:
ORA-01756: 括号内的字符串没有正确结束
 
 
 
相信你们对这样的错误不陌生吧
 
SQL> SELECT 'SDLF FROM DUAL;
ERROR:
ORA-01756: 括号内的字符串没有正确结束
 
测试

   也就是说,当第二个单引号充当转义角色,第三个单引号被转义,(既:select '' ' from dual;)天然就缺乏与第一个单引号匹配的单引号了,出现了孤立的单引号
下面的两个实验就更加支持了上面的结论。
 
SQL> SELECT ' '' ' FROM DUAL;
 
''''
------
'
 
SQL> SELECT '' '' FROM DUAL;
SELECT '' '' FROM DUAL
          *
ERROR 位于第 1 行:
ORA-00923: 未找到预期 FROM 关键字
 
 
 
对于第一个:SELECT ' '' ' FROM DUAL;
对于第二个:不存在转义。
 
上面的这两个实验其实也是单引号转义与非转义的一个性质:转义是密集的,也就是说,若是单引号出如今转义的位置上,而该单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对。
 
二、链接符‘||’致使了新一轮的转义:链接符号‘||’左右的单引号没有任何的关系,除非‘||’是做为字符串的一部分(这在动态SQL中很常见)。
 
spa

SQL> SELECT 'ORACLE'||'''' FROM DUAL;
 
'ORACLE'||''
----------
ORACLE'
 我的理解,'ORACLE'||'''' 后面的“''''”应该认为是一个字符串(即先后单引号,中间是“''”串,而中间又是密集单引号,所以第一个为转义功能)
SQL> SELECT 'ORACLE''''' FROM DUAL;
 
'ORACLE'''''
------------
ORACLE''
orm

对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:SELECT 'ORACLE'||'''' FROM DUAL;
对于第二个,因为第二个单引号后面存在单引号,因此就不与第一个配对,而是充当了转义的角色。既:SELECT 'ORACLE''''' FROM DUAL;
 
有了上面的两条原则,咱们就能够从容的面对复杂的动态SQL了。
字符串



Oracle 字符串链接单引号:it

1.       首尾单引号为字符串识别标识,不作转译用select

2.       首尾单引号里面若是出现的单引号,而且有多个,则相连两个单引号转译为一个字符串单引号引用

相关文章
相关标签/搜索