Ideelt set, i stedet for at sende en enkelt streng sammensat af kommaseparerede værdier, ville du sende i en samling. Hvis du har noget lignende
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
så kan du overføre denne samling til din procedure og bruge den i en WHERE
klausul
CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
AS
...
BEGIN
FOR i IN (SELECT *
FROM table_name
WHERE column_name IN (SELECT *
FROM TABLE( p_values )))
LOOP
...
END LOOP;
END;
Hvis du virkelig har brug for at indsætte en kommasepareret streng, kan du definere den samme samlingstype og derefter parse strengen for at udfylde samlingen ved at bruge noget som Tom Kytes str2tbl
funktion
. Men det vil være mindre effektivt end at sende en samling til at starte med.