sql >> データベース >  >> RDS >> Oracle

Oracle は IN 条件内で文字列を使用します

    in collectionsで使用されます 、したがって、最初に入力文字列を collection に変換する必要があります (コンマ区切りに基づいて行に分割することにより)

    このようなことを試してください

    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 () true を返します if :input_id null です .

    別のアプローチ 最初にクエリ全体を文字列として構築し、次に execute immediate のいずれかで実行します または php 経由 .ただし、これにより SQL インジェクション が発生する可能性があります 懸念。



    1. 日付データ型のEquals(=)とLIKE

    2. 行間の違いを考慮した行のグループ化

    3. SQLServerのXML値から要素名のリストを取得するにはどうすればよいですか

    4. ddlcreateスクリプトでORA-00942エラーを抑制します