转自:http://blog.chinaunix.net/uid-7655508-id-3684042.html

转发只为留存学习

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

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

dingjun123@ORADB> select ''' str from dual;
ERROR:
ORA-: 引号内的字符串没有正确结束 --要使用转义,两个单引号表示一个单引号
dingjun123@ORADB> select '''' str from dual;
S
-
' dingjun123@ORADB> select '''a''' str from dual;
STR
---
'a'

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

dingjun123@ORADB> SELECT 'It'||chr()||' 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'' 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-: 引号内的字符串没有正确结束 dingjun123@ORADB> SELECT q'【a'bc【' FROM dual;
Q'【
----
a'bc

--因为]不是4个特殊界定符的开始界定符

dingjun123@ORADB> SELECT q']a'bc[' FROM dual;
ERROR:
ORA-: 引号内的字符串没有正确结束 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-: 引号内的字符串没有正确结束 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个特殊字符作为界定符,这样前后界定符包含了原生态字符串,可读性更好。

【转】【10g SQL新特性】q-quote使用的更多相关文章

  1. ABAP 7.52 中的Open SQL新特性

    S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52. 本文翻译了更新文档中有关Open SQL的部分 本文链接:http://www.cnblogs.com/hhelibe ...

  2. ABAP 7.40, SP08 中的 Open SQL 新特性

    1,使用 data_source~*指定列 在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表.视图的全部列来作为结果集.它也可以和单独指定的列c ...

  3. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  4. Oracle 11g新增not null的字段比10g快--新特性

    在11g之前添加一个not null的字段很慢.在11g之后就很快了.我们先做一个測试,然后探究下原理. SQL> select * from v$version; BANNER ------- ...

  5. ABAP 7.53 中的ABAP SQL(原Open SQL)新特性

    S/4 HANA 1809 已经在上月发布,随之而来的是ABAP 7.53. 本文是更新文档中ABAP SQL的部分的翻译. 本次更新的内容较多,主要内容包括:Open SQL更名为ABAP SQL: ...

  6. ABAP 7.50 新特性 – Open SQL中的宿主表达式和其它表达式

    在长期的停滞后,Open SQL的发展终于从沉睡中醒来.从ABAP 7.40开始,SAP推进了某些关键的改变,以尽可能地包含SQL92中的特性,并提供与ABAP CDS中的DDL里面的SELECT一样 ...

  7. 【HANA系列】SAP HANA 1.0 SPS 11 新特性

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA 1.0 SPS ...

  8. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  9. Sql Server 2012新特性 Online添加非空栏位.

    我们都知道,Sql Server在一个数据量巨大的表中添加一个非空栏位是比较费心的,缺乏经验的DBA或是开发人员甚至可能鲁莽地直接添加导致阻塞相应业务,甚至可能因为资源欠缺造成实例的全局问题.当然这都 ...

随机推荐

  1. iOS_直播类app_HTTP Live Streaming

    http://www.2cto.com/kf/201606/513980.html https://developer.apple.com/library/ios/technotes/tn2224/_ ...

  2. mysql 创建用户、授权等操作

    一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...

  3. JQuery EasyUI DataGrid列表所见所得随意导出excel

    1.抽取DataGrid列表数据 function ExportNormal(strXlsName, exportGrid, postUrl, hiddenColumns) { /// <sum ...

  4. webpack常用配置总结

    1. webpack简介 webpack 是一个模块打包工具.它使得模块相互依赖并且可构建等价于这些模块的静态资源.相比于已经存在的模块打包器(module bundler),webpack的开发动机 ...

  5. Docker常用命令大全

    1. 查看docker信息(version.info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2. 对image的操作(s ...

  6. MongoDB 安装及其配置

    安装: 安装路径d:MongoDB较短便于后续操作 配置: 1.新建data文件夹并在data文件夹下新建db和log文件夹,路径如下 MongoDB\data\db MongoDB\data\log ...

  7. NGUI之UIRoot——屏幕的自适应分辨率的计算

    //原来写在其他博客上的东西,搬迁 预备知识: 要明确的三个概念: 设计分辨率:在编辑器上开发UI使用的分辨率.我们所有的UI都是在这个分辨率下设计制作的. 显示区域分辨率:设备上所显示的UI区域在编 ...

  8. Docker上ubuntu新建用户的网络访问不通问题

    背景 作为一个生命不息,折腾不止的码农.各种操作系统被我不知道搞崩了多少次,无数个夜晚连夜抢修数据,重装系统,那个累啊!! Option 1:备份.数据可以备份,配置可以备份,安装包可以备份.但是安装 ...

  9. 安天移动安全应对“DressCode”威胁,发布企业移动威胁检查工具

    近日,一种名为"DressCode"的恶意代码引起了国内安全行业的关注,该恶意代码以企业员工的移动设备作为跳板对企业内网进行攻击,对企业安全造成严重威胁.安天移动安全公司威胁情报团 ...

  10. Delphi容器类之---TOrderedList、TStack、TQueue、TObjectStack、TObjectQueue

    TOrderedList.TStack.TQueue Contnrs单元还定义了其他三个类:TOrderedList.TStack.TQueue TOrderedList TOrderedList = ...