I stället för att skicka in en enda sträng som består av kommaseparerade värden, skulle du helst skicka i en samling. Om du har något liknande
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
sedan kan du skicka in samlingen till din procedur och använda 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;
Om du verkligen behöver skicka in en kommaseparerad sträng kan du definiera samma samlingstyp och sedan analysera strängen för att fylla samlingen med något som Tom Kytes str2tbl
funktion
. Men det kommer att vara mindre effektivt än att skicka in en samling till att börja med.