Oracle Q-quote delimiter Quote(q) 字串原樣輸出

lhrbest發表於2017-03-19

      在sql查詢中,我們經常需要原樣輸出字串,如果字串中含有大量的單引號、雙引號或者特殊字元,那麼需要用單引號轉義拼接字串,這樣會非常的麻煩。 oracle提供了一個Q-quote的表示式來原樣輸出字串。

在SQL或者PLSQL中如果要表達一個帶有特殊字元的字串時,通常要用‘’包裝起來。但如果字串本身包含‘或者“這樣的字元,那麼實現起來有點繁瑣。

比如:My Name is ‘Ma Yu Ping’

用SQL實現:

SQL> select ‘My Name Is ”Ma Yu Ping”’ names from dual;

NAMES 
———————————————- 
My Name Is ‘Ma Yu Ping’

SQL> select ‘My Name Is "Ma Yu Ping"’ names from dual;

NAMES 
———————————————- 
My Name Is "Ma Yu Ping"

在Oracle中,single-quote(‘)是一個表示字串的關鍵字。所以在字串中用兩個”表示一個實際的單引號字元。所有才會有了上面第一條SQL的’My Name Is ”Ma Yu Ping”’ 。雙引號“被識別為一個實際的的字串,第二條sql中的雙引號不用括引。其實Oracle提供了一個Q-quote的表示式,用來簡化SQL或PLSQL中字串的表示。

SQL> select q’[My Name Is "Ma Yu Ping"]‘ names from dual;

NAMES 
———————————————- 
My Name Is "Ma Yu Ping"

SQL> select q’[My Name Is 'Ma Yu Ping']‘ names from dual;

NAMES 
———————————————- 
My Name Is ‘Ma Yu Ping’

語法很簡單,必須將要表示的字串用一對特殊字元括起來,這對字元必須一致。

SQL> select q’[My Name Is 'Ma Yu Ping'|' names from dual; 
ERROR: 
ORA-01756: 引號內的字串沒有正確結束

SQL> select q'|My Name Is 'Ma Yu Ping'|' names from dual;

NAMES 
---------------------------------------------- 
My Name Is 'Ma Yu Ping'

常用簡化的寫法,比如一個where c='d'的產量表示式的表示方法。

SQL> select 'where c=''d''' from dual; --老的寫法

'WHEREC=''D''' 
---------------------- 
where c='d'

SQL> select 'where c='d'' from dual; --原則的寫法受’表示式的影響出錯 
select 'where c='d'' from dual 
                  * 
第 1 行出現錯誤: 
ORA-00923: FROM keyword not found where expected

SQL> select q'[where c='d']‘ from dual; --使用q-quote表示式的寫法

Q’[WHEREC='D']‘ 
———————- 
where c=’d’


SELECT  Q'[I'm a boy,my name is 'david']'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'(I'm a boy,my name is 'david')'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'{I'm a boy,my name is 'david'}'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'|I'm a boy,my name is 'david'|'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'aI'm a boy,my name is 'david'a'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'2I'm a boy,my name is 'david'2'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'@I'm a boy,my name is 'david'@'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'*I'm a boy,my name is 'david'*'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'#I'm a boy,my name is 'david'#'  FROM  DUAL;  --結果:I'm a boy,my name is 'david'
SELECT  Q'[[@#$%^&*~?/" ']]' FROM  DUAL;   --結果:[@#$%^&*~?/" ']


oracle本身預設的是單引號,但是在大家寫儲存過程或者寫SQL語句時,有時候需要拼SQL或者是SQL的值裡需要傳入含單引號的值,此時就需要使用兩個單引號"''"來進行轉義,其實oracle本身提供了這種轉換預設單引號為其他標識的方法那就是——"q"

q [Oracle's quote operator]

q'c text-to-be-quoted c' c is a single character (called the quote delimiter). 
With the ?quote operator? apostrophes don't have to
 be doubled: 

SQL> select q'#Oracle's quote operator#' from dual;
Q'#ORACLE'SQUOTEOPERATO
-----------------------
Oracle's quote operator







About Me

...............................................................................................................................

本文整理自網路

本文在itpubhttp://blog.itpub.net/26736162)、部落格園http://www.cnblogs.com/lhrbest和個人微信公眾號(xiaomaimiaolhr)上有同步更新

本文pdf小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ群:230161599     微信群:私聊

聯絡我請加QQ好友(642808185),註明新增緣由

文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。

 Oracle Q-quote delimiter  Quote(q) 字串原樣輸出  DBA筆試面試講解

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2135631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章