2011-07-20 16 views
1

私は、Oracle 11gのデータベースを使用していますクエリ文字列の特殊文字を処理する方法は?

select * from fact_table where name = 'R&D' 

select * from fact_table where name = 'John's' 

のようなクエリを書いています。私の質問に '&'や '' 'のような特殊文字を扱える汎用関数やクエリスタイルはありますか?

私はそれぞれのケースを別々に扱いたくないので、私は汎用的な仕組みが必要です。

これが重複投稿がある場合は、アンパサンドが正常に動作する必要があり、オリジナルポスト

+0

私は "最良の"方法はわかりませんが、エスケープユーザー定義関数を使用して文字列を変更することができます。 –

答えて

0

使用済みオペレータ

select * from fact_table where name = q'#John's#' 

*選択、それは、SQL * Plusの

set define ~ 
select * from fact_table where name = 'R&D' 

のようなツールのための問題である。しかし、PL/SQLブロックでは、それが正常に働いているようだ:

declare 
    output VARCHAR2(10); 
BEGIN 
    SELECT name 
    INTO output 
    FROM fact_table 
    WHERE name = '&1'; 

    DBMS_OUTPUT.put_line('Output: ' || output); 
END; 
/

SQL> @test.sql; 
Enter value for 1: R&D 
old 7:   WHERE name = '&1'; 
new 7:   WHERE name = 'R&D'; 
Output: R&D 

PL/SQL procedure successfully completed. 
1

に私を導いてください。 SQLPlusやSQLDeveloperなどのツールの中には、この文字を使用してバインド変数を示すものがあります。このように、この「機能」を無効にします。 セットは次のように 再有効化、それオフ定義: セット単一引用符は特別な注意が必要

に定義します。 を使用して、2つの単一引用符のような、リテラルとしてそれを治療するためのデータベースを伝えるために: はFACT_TABLEから名= 'ジョンのアンパサンドについては