IN条件を使用するSELECT文があり、IN条件の中に文字列があります...シングルクォートを無視するにはどうすればよいですか?私はあなたがリストを処理することを推測していOracleはIN条件内で文字列を使用します
Select * from employ where id = 12 and org_id in ({$id})
$id = '12,13'
おかげ
IN条件を使用するSELECT文があり、IN条件の中に文字列があります...シングルクォートを無視するにはどうすればよいですか?私はあなたがリストを処理することを推測していOracleはIN条件内で文字列を使用します
Select * from employ where id = 12 and org_id in ({$id})
$id = '12,13'
おかげ
in
あなたの入力文字列が最初に(カンマ区切り文字に基づいて、列に分割することによって)collection
に変換する必要がありますので、collections
で使用されて
を経由して、この
Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null, (select employ.org_id from dual)
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)))
FROM (SELECT :input_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
)
のようなものを試してみてください、このorg_id in()
は、:input_id
がnull
の場合、true
を返します。
別のアプローチは、最初の文字列として全体のクエリを作成し、次いでexecute immediate
またはphp
いずれかを介してそれを実行することであろう。しかし、これはsql injectionの懸念を引き上げる可能性があります。
。残念ながら、SQLではパラメータをリストにすることはできませんので、より多くの作業を行う必要があります。
一つの方法は、like
(または正規表現)を使用しています。
Select *
from employ
where id = 12 and
',' || org_id || ',' like '%,' || {$id} || ',%';
パフォーマンスが問題であり、あなたがインデックスを使用する場合は、他のオプションを検討する必要があるかもしれません。最も簡単なのは、パラメータを省略してクエリ文字列を変更するだけです(動的SQLを使用してクエリを実行する)。
問題は、IN関数内で'12,13 'を使用すると、IN関数が12と13を単一の数値として読み込むためです..... – Nodos
「無効な数値」は、入力は有効な番号ではありません。 INは条件であり、関数ではありません。コンパイラ(INではなく)は、'12,13 'を正確にはそれを数字ではなくSTRINGと読みます。 「無効な番号」エラーが発生します。 – mathguy