[ Oracle ] q 演算子 シングルクォーテーションを文字として扱う

Pocket

SQL で文字列を扱う場合は、シングルクォーテーション ( ‘ ) で囲む必要がありますが、シングルクォーテーション自体を文字として扱いたい場合には ( ) とシングルクォーテーションを2つ連続で記述しなければいけません。また、Oracle 10g から代替引用符 q 演算子を使用することでも同等のことができるようになりました。ここではこれらのサンプル SQL を掲載しています。

スポンサーリンク

シングルクォーテーションなしの文字列
select 'I am boy' as result from dual

result
---------------
I am boy
シングルクォーテーションありの文字列でエラーとなる記述

ORA-ERROR が発生します。ORA-01756:引用符付き文字列が正しく終了していません

select 'I'm boy' as result from dual

ORA-01756:引用符付き文字列が正しく終了していません
シングルクォーテーション 2連続で記述
select 'I''m boy' as result from dual

result
---------------
I'm boy
代替引用符 q 演算子

Oracle10g より代替引用符 q 演算子使用することができるようになりました。シングルクォーテーション以外の文字をテキスト・リテラルの始まりと終わりを示す一重引用符として扱えるようになっています。

参考リンクでの説明内容

開始のquote_delimiterが[、{、<または(のいずれかである場合、 終了のquote_delimiterも対応する]、}、>または)である必要があります。 それ以外の場合は常に、開始および終了のquote_delimiterは同じ文字である必要があります。

難しいです。これは、以下のように引用符の記述ができることを意味しています。

オラクルの HP は本当に無味乾燥です。。。。。

select q'#I'm boy#' as result from dual
select q'[I'm boy]' as result from dual
select q'{I'm boy}' as result from dual
select q'<I'm boy>' as result from dual
select q'(I'm boy)' as result from dual

result
---------------
I'm boy

しかし、この仕様の場合、与えられる文字列に制約がない場合、確率は低いと思いますがエラーとなる可能性があります。下記のケースで ORA-ERROR が発生します。ORA-00923:Fromキーワードが指定の位置にありません。

select q'#I'm #'boy#' as result from dual
select q'[I'm ]'boy]' as result from dual

ORA-00923:Fromキーワードが指定の位置にありません。
参考

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *