2011年12月13日火曜日

[Oracle]テキストリレラルの使用方法

Oracleでシングルクォート(')を文字列中で使う場合、シングルクォートでエスケープ必須だと思ってましたが、
代替引用メカニズムなるものを使用してrubyっぽくエスケープをせずにリテラルが定義できるみたいです。

マニュアルはこちら
http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements003.htm#i42617

従来までのリテラルの使い方
SQL> select 'hoge''s' from dual;

'HOGE''S'
------------
hoge's

大替引用メカニズムなるものを使用するとかんな感じになります。
q(Q)'任意の文字(開始)<文字列>任意の文字(開始文字に対応した終了文字)'

SQL> select Q'{hoge's}' from dual;

Q'{HOGE'S}'
------------
hoge's

任意の文字の部分には、何でも使用できるのでこんな感じでもいけちゃいます。ものすごくわかりづらいですが。
SQL> select Q'ahoge'sa' from dual;

Q'AHOGE'SA'
------------
hoge's