zoukankan      html  css  js  c++  java
  • 【转】【10g SQL新特性】q-quote使用

    转自: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-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'' 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个特殊字符作为界定符,这样前后界定符包含了原生态字符串,可读性更好。

  • 相关阅读:
    MARKY一下。
    从一个git仓库拷贝到另一个git仓库
    Git:四、连接GitHub远程仓库
    木门工厂木门、门套、套线公式和算法
    设计模式之代理模式
    2018年软件开发状态报告
    产品研发流程与周期(非原创)
    软件工程师的核心竞争力
    linux下安装redis安装使用
    8 个 Tips 让你更好的进行 Code Review
  • 原文地址:https://www.cnblogs.com/myrunning/p/6197717.html
Copyright © 2011-2022 走看看