Gunakan koleksi (tidak terbatas pada 1000 item seperti IN
klausanya adalah):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
dan SYS.ODCINUMBERLIST
adalah jenis koleksi yang disediakan di SYS
skema.
Anda dapat bergabung dengan ini langsung ke tabel mana pun Anda SELECT
ing dari tanpa perlu menggunakan DUAL
tabel:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Jika Anda bisa mendapatkan tipe koleksi yang dibuat maka Anda bahkan tidak memerlukan TABLE
ekspresi dan dapat menggunakannya secara langsung di WHERE
klausa menggunakan MEMBER OF
operator:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Anda bahkan dapat meneruskan nilai sebagai parameter bind - lihat jawaban saya di sini