V ideálním případě byste místo předávání jediného řetězce složeného z hodnot oddělených čárkami předávali v kolekci. Pokud máte něco jako
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
pak byste mohli předat tuto kolekci do své procedury a použít ji v WHERE
doložka
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;
Pokud opravdu potřebujete předat řetězec oddělený čárkami, můžete definovat stejný typ kolekce a poté analyzovat řetězec, aby se kolekce naplnila pomocí něčeho jako Tom Kyte's str2tbl
funkce
. Ale to bude méně efektivní než předání kolekce pro začátek.