Voor zover ik je probleem begrijp, heb je een methode nodig om een door komma's gescheiden tekenreeks als invoer te accepteren, deze op te splitsen in een verzameling gehele getallen en vervolgens een getal (lees:geheel getal) te vergelijken met de waarden in deze verzameling.
Oracle biedt hoofdzakelijk drie soorten verzamelingen - varrays , geneste tabellen en associatieve arrays . Ik zou uitleggen hoe je een door komma's gescheiden tekenreeks omzet in een geneste tabel en deze gebruikt om te zoeken of te vergelijken.
Eerst moet u een objecttype in het schema definiëren. U kunt alleen query's met dit type schrijven als u het op schemaniveau definieert.
CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/
CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/
Definieer vervolgens een functie als volgt:
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;
U bent klaar met de DDL die nodig is voor deze taak. Nu kunt u eenvoudig uw vraag schrijven als:
SELECT *
FROM ..
WHERE ...
AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));