「7845,6986,2548」のようにコンマで区切られた文字列があります 私はコンマを分割してselect文のIN句に結果を渡したい この機能を使用します。 任意のヘルプ、PL SQLコンマで区切られた文字列から数値の配列を作成
select * from my_tbl where col1 IN (TO_NUMBER(select * from table(IN_LIST('7845,6986,2548'))));
が、それはうまくいきませんでした:
create or replace TYPE t_in_list_tab as table of varchar2(4000);
create or replace FUNCTION in_list (p_in_list IN VARCHAR2)
RETURN t_in_list_tab
AS
l_tab t_in_list_tab := t_in_list_tab();
l_text VARCHAR2(32767) := p_in_list || ',';
l_idx NUMBER;
BEGIN
LOOP
l_idx := INSTR(l_text, ',');
EXIT WHEN NVL(l_idx, 0) = 0;
l_tab.extend;
l_tab(l_tab.last) := TRIM(SUBSTR(l_text, 1, l_idx - 1));
l_text := SUBSTR(l_text, l_idx + 1);
END LOOP;
RETURN l_tab;
END;
この関数の戻り値の型はVARCHAR2ですが、私の列の型が数値で、私は次のようにTO_NUMBERを使用しようとしました?
重複した質問と同じです。あなたは 'IN((SELECT ... FROM TABLE(...))) '' MEMBER OF IN_LIST( '1,2,3') 'だけを使用できます。 – MT0
また、 'CREATE TYPE intlist IS TABLE OF INTEGER;'を作成し、関数内でそのコレクションと 'TO_NUMBER()'を使用することもできます。 – MT0