在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;
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;
SQL> select q’[My Name Is 'Ma Yu Ping']‘ names from dual;
文法很簡單,必須将要表示的字元串用一對特殊字元括起來,這對字元必須一緻。
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;
----------------------------------------------
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"
About Me ............................................................................................................................... ● 本文整理自網絡 ● QQ群:230161599 微信群:私聊 ● 聯系我請加QQ好友(642808185),注明添加緣由 ● 文章内容來源于小麥苗的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 拿起手機使用微信用戶端掃描下邊的左邊圖檔來關注小麥苗的微信公衆号:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。