ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 字符串引用与转义

字符串引用与转义

原创 Linux操作系统 作者:anglei 时间:2009-05-20 10:46:11 0 删除 编辑

转载http://www.itpub.net/678193.html

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

本人在做项目维护的时候,遇到了开发人员遗留下来的大量动态SQL,很是发了一段时间来弄明白单引号的双重角色。现做如下总结,即使在各位高手面前班门弄斧,由希望能给与我同样被单引号双重角色迷惑的同仁们有所帮助!
     在oracle中,字符串是由单引号引用的,而转义也是由单引号来完成的,这对于许多初学者而言是件头疼的事情,尤其是开始学习动态SQL的人。如果就单纯的单引号而言,很容易让人理解:它总是找与它最近的一个单引号配对。也就是所谓的就近原则;但是在单引号充当转义角色的时候,情况就显得有些让人费解了。(为方便起见,红色单引号都是充当转义角色)
   1、从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。
PHP code:


[/COLOR]

SQLselect '''' from dual;



''

--



为了证实结果是被第二个单引号转义的第三个单引号(既:select '''' from dual;),我们做如下两个测试:
PHP code:


SQL
select '' from dual;

ERROR:

ORA
-01756括号内的字

相信大家对这样的错误不陌生吧
PHP code:


SQL
select sdlf from dual;

ERROR:

ORA
-01756括号内的字
也就是说,当第二个单引号充当转义角色,第三个单引号被转义,(既:select '' ' from dual;)自然就缺少与第一个单引号匹配的单引号了,出现了孤立的单引号
下面的两个实验就更加支持了上面的结论。
PHP code:


SQL
select ' '' ' from dual;



''''

------

 
'



SQL> select '' '' from dual;

select '' ' 
from dual

          
*

ERROR 位于第 1 行:

ORA-00923未找到预期 
对于第一个:select ' '' ' from dual;
对于第二个:不存在转义。

上面的这两个实验其实也是单引号转义与非转义的一个性质:转义是密集的,也就是说,如果单引号出现在转义的位置上,而该单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对。

2、连接符‘||’导致了新一轮的转义:连接符号‘||’左右的单引号没有任何的关系,除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。
PHP code:


SQL
select 'exit'||'''' from dual;



'EXIT'||''

----------

exit
'



SQL> select '
exit''''' from dual;



'
EXIT'''''

------------

exit'

对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:select 'exit'||'''' from dual;
对于第二个,由于第二个单引号后面存在单引号,所以就不与第一个配对,而是充当了转义的角色。既:select 'exit''''' from dual;

有了上面的两条原则,我们就可以从容的面对复杂的动态SQL了。
'


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14906671/viewspace-600532/,如需转载,请注明出处,否则将追究法律责任。

下一篇: WAS使用方法
请登录后发表评论 登录
全部评论

注册时间:2008-08-08

  • 博文量
    12
  • 访问量
    23586