Oracleストアド・プロシージャ、文字列inパスをカンマで区切る処理


パラメータ定義i_ward_id in varchar2
ストアド・プロシージャwhere ward_id in (i_ward_id )
テストでエラーが検出されましたwhere ward_のように書きましたid in(‘11’,‘22’,‘33’)は問題ありません.しかしプログラムから渡されたパラメータi_ward_id=「‘11’,‘22’,‘33’」で問題が発生する.
調査資料の解決方法は以下の通りである.
SELECT REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL, 'i') AS STR    

FROM DUAL   CONNECT BY LEVEL <=        

     LENGTH('17,20,23') - LENGTH(REGEXP_REPLACE('17,20,23', ',', ''))+1;  

oracle関数リファレンス:https://www.cnblogs.com/yuany69/p/6093017.html文字列の集合を一列に分割してin
使用方法:oracle
 where ward_id in (
                SELECT REGEXP_SUBSTR(i_ward_id, '[^,]+', 1, LEVEL, 'i') AS STR   FROM DUAL
                CONNECT BY LEVEL <=   LENGTH(i_ward_id) - LENGTH(REGEXP_REPLACE(i_ward_id, ',', ''))+1
                )

プログラムコードに文字列を組み立て、パラメータとして入力
 var  ward_id  = lstResult.Select(q => q.WARD_ID );
            strWards = string.Join(",", tempList);