Según entiendo su problema, necesita un método para aceptar una cadena delimitada por comas como entrada, dividirla en una colección de enteros y luego comparar un número (léase:entero) con los valores de esta colección.
Oracle ofrece principalmente tres tipos de colecciones - varrays , tablas anidadas y matrices asociativas . Explicaría cómo convertir una cadena delimitada por comas en una tabla anidada y usarla para consultar o comparar.
Primero, debe definir un tipo de objeto en el esquema. Puede escribir consultas utilizando este tipo solo si lo define a nivel de esquema.
CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/
CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/
A continuación, defina una función como esta:
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;
Ha terminado con el DDL requerido para esta tarea. Ahora, simplemente puede escribir su consulta como:
SELECT *
FROM ..
WHERE ...
AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));