Per quanto ho capito il tuo problema, hai bisogno di un metodo per accettare una stringa delimitata da virgole come input, suddividerla in una raccolta di numeri interi e quindi confrontare un numero (leggi:intero) con i valori in questa raccolta.
Oracle offre principalmente tre tipi di raccolte - varray , tabelle nidificate e array associativi . Spiegherei come convertire una stringa delimitata da virgole in una tabella nidificata e usarla per eseguire query o confrontare.
Innanzitutto, è necessario definire un tipo di oggetto nello schema. Puoi scrivere query utilizzando questo tipo solo se lo definisci a livello di schema.
CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/
CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/
Quindi, definisci una funzione come questa:
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;
Hai finito con il DDL richiesto per questa attività. Ora puoi semplicemente scrivere la tua query come:
SELECT *
FROM ..
WHERE ...
AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));