私があなたの問題を理解している限り、入力としてコンマ区切りの文字列を受け入れ、それを整数のコレクションに分割してから、数値(読み取り:整数)をこのコレクションの値と比較するメソッドが必要です。
>
Oracleは、主に3種類のコレクション
を提供しています。 - varrays
、ネストされたテーブル
および
まず、スキーマでオブジェクトタイプを定義する必要があります。このタイプを使用してクエリを記述できるのは、スキーマレベルで定義した場合のみです。
CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/
CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/
次に、次のような関数を定義します。
FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
RETURN entity_id_set IS
v_table entity_id_set;
BEGIN
WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
'[^,]+',
1,
LEVEL)))
str
BULK COLLECT INTO v_table
FROM temp t
CONNECT BY INSTR (str,
',',
1,
LEVEL - 1) > 0;
RETURN v_table;
END comma_to_nt_integer;
これで、このタスクに必要なDDLが完了しました。これで、クエリを次のように簡単に記述できます。
SELECT *
FROM ..
WHERE ...
AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));