2016-12-13 2 views
4

パラメータを受け入れる手順はp_my_list_of_numbersです。これはコンマで区切られた文字列です。これは'1,4,5,8,9,22,89'のようになります。1つの文字列変数をとり、 'IN'ステートメントで使用します

PROCEDURE my_procedure (p_my_list_of_numbers VARCHAR2) 
BEGIN 

     SELECT * FROM my_table WHERE ID IN (1,4,5,8,9,22,89); //THIS RETURNS DATA 
     SELECT * FROM my_table WHERE ID IN p_my_list_of_numbers; //DOES NOT RETURN ANYTHING 

END; 

この1つの長い文字列を選択クエリで使用してデータを返す方法を教えてください。

+0

動的SQLを作成して実行するか、値を分割して一時表に挿入する必要があります –

答えて

4

あなたは以下のサブクエリを使用することができます。

select regexp_substr('1,4,5,8,9,22,89','[^,]+', 1, level) from dual 
connect by regexp_substr('1,4,5,8,9,22,89', '[^,]+', 1, level) is not null; 

これは、結果セットの中にカンマ区切りのリストを分割します。

PROCEDURE my_procedure (p_my_list_of_numbers VARCHAR2) 
BEGIN 

     SELECT * FROM my_table 
     WHERE ID IN (
      select regexp_substr(p_my_list_of_numbers,'[^,]+', 1, level) 
      from dual 
      connect by regexp_substr(p_my_list_of_numbers, '[^,]+', 1, level) is not null); 

END; 

もちろん、あなたがあなたの入力を検証することがありますが、私は、これはちょうどあなたの質問のためのサンプル手順だったと仮定します。あなたの手順は、次のようになります。

関連する問題