在oracle中,字符串是由单引号引用的,而转义也是由单引号来完成的,这对于许多初学者而言是件头疼的事情,尤其是开始学习动态SQL的人。如果就单纯的单引号而言,很容易让人理解:它总是找与它最近的一个单引号配对。也就是所谓的就近原则;但是在单引号充当转义角色的时候,情况就显得有些让人费解了。(为方便起见,红色单引号都是充当转义角色)
1、从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。
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;
对于第二个:不存在转义。
上面的这两个实验其实也是单引号转义与非转义的一个性质:转义是密集的,也就是说,如果单引号出现在转义的位置上,而该单引号后面紧跟(紧跟的定义为:两个单引号之间是零距离的)的不是单引号,这个时候单引号就不在充当转义的角色,而是与它前面的配对。
2、连接符‘||’导致了新一轮的转义:连接符号‘||’左右的单引号没有任何的关系,除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。
SQL> select 'exit'||'''' from dual;
'EXIT'||''
----------
exit'
SQL> select 'exit''''' from dual;
'EXIT'''''
------------
exit''
对于第一个,前两个单引号配对,后面四个单引号按照上面的第一条原则分配,既:select 'exit'||'''' from dual;
对于第二个,由于第二个单引号后面存在单引号,所以就不与第一个配对,而是充当了转义的角色。既:select 'exit''''' from dual;
有了上面的两条原则,我们就可以从容的面对复杂的动态SQL了。
分享到:
相关推荐
ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为...
处理方法:判断一下val1,val2中是否含有单引号,若含单引号,则将单引号’替换成两个单引号”。 将字段与字段值组织到一个HashTable中,再抽象出一个组织sql语句的函数getSqlByHashTable(): HashTable ht =new ...
因为oracle每次in()数据不能超过1000行,但是每个数据都要接单引号,所以写了这个程序,使用方法:复制多行数据,然后双击程序,会自动把数据加上单引号更新粘贴板,粘贴到in()中去就可以了。
主要介绍了oracle插入字符串数据时字符串中有'单引号问题的相关资料,需要的朋友可以参考下
SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf
POWERDESIGNER生成oracle表名带有引号
首尾单引号里面如果出现的单引号,并且有多个,则相连两个单引号转译为一个字符串单引号 3.单引号一定成对出现,否者这个字符串出错,因为字符串不知道哪个单引号负责结束 selectto_char('aaa')fromdual; ...
Oracle数据库教程_——__DBA强化实战系列第二期:centos6.4安装oracle12c_单实例asm
Integrating_EBS_with_Oracle_Internet_Directory_and_Oracle_Single_Sign-On Oracle EBS 单点登录 方案
Oracle 19c 单实例 RU 从19.3.0 升级到19.6.0 操作手册 Dave From CNDBA 社区
Oracle 单实例DG搭建详解
redhat5 下安装oracle10g redhat6下安装oracle11g 详细到装虚拟机,文件配置,安装详细过程
ORACLE 12C RAC 到 单机 DG 部署详细过程,遇到任何问题可以留言
oracle2-单表操作
java导出oracle数据(单表)
在ORACLE中,单引号有两个作用: 字符串是由单引号引用和转义。最近就遇到了转义的问题,下面这篇文章就给大家主要介绍了关于Oracle中转义字符的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
Oracle里面HR表或者Scott表里面一些经典的练习!
Oracle 备份、恢复单表或多表数据步骤,适用于 Oracle 8、9、10。 *备份单表或多表数据:
虚拟机centos7使用mobaxterm安装oracle19c单实例数据库每一步具体设置详细截图