`

oralce里面的单引号转义

 
阅读更多

在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 单引号转义: 在ORACLE中,单引号有两个作用:   1:字符串是由单引号引用   2:转义。  单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解  1.从第二个单引号开始被视为...

    Oracle中转义字符的详细介绍

    “I”作为字符串,所以语句中I需要加上单引号。 由于数据库中有多张表,我不想一条一条的语句写,希望能够通过sql语句直接生成所有的语句,所以写了如下sql: select 'update ' || table_name || ' set flag = 'I''...

    SQL中的转义字符

    之前写了篇文章《Oracle转义字符》,说到了Oracle中单引号“’”的转义字符是单引号“’”,那么其他的特殊字符的转义字符又是什么呢,如模糊查询的占位符“%”,“_”等。  经过测试,在Oracle中不能再使用单引号...

    PL/SQL 基础.doc

    'tom''s pen' ''为2个单引号(标识转义) 为tom's pen 2)数字型 123 -4 +56 0 9.0 1.23E5 9.8e-3 3)布尔型 TRUE FALSE NULL 7. 变量声明 语法 Var_name [CONSTANT](标识常量,可选) type [NOT NULL](标识为not-...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例037 区分单引号和双引号 68 实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例037 区分单引号和双引号 68 实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变...

    C#开发经验技巧宝典

    0837 如何在查询中正确使用单引号“’” 502 0838 SQL中SELECT语句的执行顺序 502 0839 在查询时查询数据为指定长度的数据 502 0840 如何利用WHERE参数过滤数据 503 0841 如何正确地理解和运用SQL中的判式...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    mysql数据库的基本操作语法

    Ø 常用查询 MySQL结束符是“;”结束。 1、 显示所有数据库 show databases; 2、 删除数据库 drop database dbName; 3、 创建数据库 create database [if not exists] dbName;...可以完成单条记录、多条记录、单表...

    C#编程经验技巧宝典

    19 <br>0038 巧用“^=”运算符 19 <br>0039 巧用位移运算符 20 <br>0040 使用条件运算符 20 <br>0041 巧用分隔符 20 <br>0042 如何处理转义字符 21 <br>0043 “;”结束符问题 21 ...

Global site tag (gtag.js) - Google Analytics