Доколкото разбирам проблема ви, имате нужда от метод за приемане на низ, разделен със запетая, като вход, разделянето му на колекция от цели числа и след това сравняване на число (да се чете:цяло число) със стойностите в тази колекция.
Oracle предлага основно три типа колекции - варианти , вложени таблици и асоциативни масиви . Бих обяснил как да преобразувам низ, разделен със запетая, във вложена таблица и да я използвам за заявка или сравнение.
Първо, трябва да дефинирате тип обект в схемата. Можете да пишете заявки, използвайки този тип, само ако го дефинирате на ниво схема.
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)));