Sejauh yang saya mengerti masalah Anda, Anda memerlukan metode untuk menerima string yang dibatasi koma sebagai input, memecahnya menjadi kumpulan bilangan bulat dan kemudian membandingkan angka (baca:bilangan bulat) dengan nilai dalam kumpulan ini.
Oracle terutama menawarkan tiga jenis koleksi - varray , tabel bertingkat dan array asosiatif . Saya akan menjelaskan cara mengonversi string yang dipisahkan koma menjadi tabel bersarang dan menggunakannya untuk membuat kueri atau membandingkan.
Pertama, Anda perlu menentukan tipe objek dalam skema. Anda dapat menulis kueri menggunakan jenis ini hanya jika Anda mendefinisikannya di tingkat skema.
CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/
CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/
Selanjutnya, tentukan fungsi seperti ini:
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;
Anda selesai dengan DDL yang diperlukan untuk tugas ini. Sekarang, Anda cukup menulis kueri Anda sebagai:
SELECT *
FROM ..
WHERE ...
AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));