q-quote 转义限定符的用法

一句话概括 

1.Oracle10g 之后可以使用q'限定符xxx'xxxx限定符' 方式代替转义符号功能

2.限定可以是任一单字节符号,括号,字母数字都可以,但开始限定符必须与结束限定符一致,除了3中4中特例

3.开始是4种特殊限定符[,{,<,(,那么结束界定符必须是],},>,)---解释如果使用]为开始限定符,那结束限定符也必须是]


在Oracle中,字符串的字面量如果含有单引号,那么必须转义,而且转义符是单引号',这样加上表示字符串字面量的外层'',那么势必要写很多单引号,不仅可读性降低,而且容易出错。当然,使用chr(39),也可以代替引号,可能比写多个单引号更好,可读性强,但是毕竟这种写法不是很常见。SO,在10g中,Oracle引入了q-quote的用法。

   常规字符字面量内单引号的使用:

dingjun123@ORADB> select ''' str from dual;
ERROR:
ORA-01756: 引号内的字符串没有正确结束

--要使用转义,两个单引号表示一个单引号
dingjun123@ORADB> select '''' str from dual;
S
-
'

dingjun123@ORADB> select '''a''' str from dual;
STR
---
'a'

   另外可以使用CHR(39)作为引号来拼凑,比较简洁

dingjun123@ORADB> SELECT 'It'||chr(39)||' a cat' str FROM dual;
STR
---------
It' a cat

    虽然使用chr(39),但是看起来还是很麻烦,所以10g引入了q-quote特性。 允许按照指定规则也就是Q或q开头(如果是national character literals,那就是N或n放在Q或q之前) ,然后'界定符号 原始字面量 界定符号 ',使用规则很简单:

1) q-quote界定符可以是除了TAB,空格,回车外的任何单字节或多字节字符。
2) 除了单字节的的开始界定符是[,{,<,(,那么结束界定符必须是],},>,)  其他开始界定符与结束界定符必须一致
如:
--4个特殊单字节开始界定符是[,{,<,(,结束界定符必须是],},>,)
dingjun123@ORADB> SELECT q'[a'bc]' str FROM dual;

STR
----
a'bc

dingjun123@ORADB> SELECT q'{a'bc}' str FROM dual;
STR
----
a'bc

dingjun123@ORADB> SELECT q'<a'bc style="word-wrap: break-word;">' str FROM dual;
STR
----
a'bc

dingjun123@ORADB> SELECT q'(a'bc)' str FROM dual;
STR
----
a'bc

--因为【开始界定付是多字节,所以必须一致,特殊的就4个单字节界定符
dingjun123@ORADB> SELECT q'【a'bc[' FROM dual;
ERROR:
ORA-01756: 引号内的字符串没有正确结束

dingjun123@ORADB> SELECT q'【a'bc【' FROM dual;
Q'【
----
a'bc

--因为]不是4个特殊界定符的开始界定符
dingjun123@ORADB> SELECT q']a'bc[' FROM dual;
ERROR:
ORA-01756: 引号内的字符串没有正确结束

dingjun123@ORADB> SELECT q']a'bc]' FROM dual;
Q']A
----
a'bc

--其他非特殊的4个开始界定符的要求开始与结束一致
--a是界定符

dingjun123@ORADB> SELECT q'ab'cda' str FROM dual;


STR
----
b'cd

--A是界定符,但是结束的是a,不一致
dingjun123@ORADB> SELECT q'Ab'cda' str FROM dual;
ERROR:
ORA-01756: 引号内的字符串没有正确结束

dingjun123@ORADB> SELECT q'Ab'cdA' str FROM dual;
STR
----
b'cd

--+号是界定符
dingjun123@ORADB> SELECT q'+b'cd+' str FROM dual;
STR
----
b'cd

--单引号是界定符
dingjun123@ORADB> select q''ab'c'' from dual;
Q''A
----
ab'c

--National character literals
dingjun123@ORADB> SELECT nq'' str from dual;
STR
----------
a'b'c

dingjun123@ORADB> SELECT Nq'' str from dual;
STR
----------
a'b'c

dingjun123@ORADB> SELECT NQ'' str from dual;
STR
----------
a'b'c

dingjun123@ORADB> SELECT nQ'' str from dual;
STR
----------
a'b'c

    一般使用的时候,都是使用4个特殊字符作为界定符,这样前后界定符包含了原生态字符串,可读性更好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值