2016-04-14 9 views
0

問題があります。私はIN節を使用してクエリのパラメータを渡していますが、それは1つの単一の値としてそれを考慮しているので、それはSQLレベルでこれを処理することができますので、私にエラーを与えているので?paramterisedクエリでシングルクォートをエスケープする方法

select * from table( 'abc'、 'xyz');これは正常に動作します。代わりに、それは

としてそれを検討している本の

( 'ABC、XYZ')のテーブル名SELECT * FROM。これによりエラーが発生します

私のパラメータ値は以下の通りです 基本的に私は条件付きフィルタリングをチェックしています。なぜこの論理が記述されているのかは、where句でこのパラメータを検討するか無視してください。

ケース場合ELSE '$ {ティラ}' <> '' ''($ {テーラ} ') 次いで(中ccp.name')= 1 END

注用条件付きのフィルタリングを回避するより良いアプローチは、そのことをお勧めします。

+1

残念ながら、パラメータとしてリストを渡すことはできません。代わりに 'find_in_set()'を使うことができます。 –

+0

動作しません。 どうすればいいですか?このようなもの?'$ {thera}' <> '' ''の場合(ccp.name find_in_set( '$ {thera}'))ELSE 1 = 1 END –

答えて

0

実際に値のリストをパラメータとして渡すことができます。しかし、カスタムパラメータコンポーネントを使用する必要があります。

あなたたとえば、カスタムパラメータを作成することができますが、あなたがJavaScriptで行うように初期値を使用すると、式を使用することができ、その後parTheraの名前、および:

['abc','xyz'] 

別のオプションは、関数式を使用することで、以下のような:

function(){ 
    return "A list of words".split(" "); 
} 

次に、SQL問合せに、引数名、および値としてパラメータparTheraとしてtheraを使用して、このパラメータを追加します。

今、あなたはあなたの最初の例のようにSQL内で使用することができます:

SELECT * FROM TABLE WHERE name IN (${thera}) 

パラメータは、このようにIN (...)句の内部には、使用可能な作り、'abc','xyz'に展開されます。

注:SQLパラメータの設定には、このパラメータは、タイプのStringArrayであることを指定する必要があります。それ以外の場合は、正しく展開されません。

関連する問題