Idealiter zou u, in plaats van een enkele tekenreeks die is samengesteld uit door komma's gescheiden waarden, een verzameling door te geven. Als je iets hebt als
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
dan zou je die verzameling in je procedure kunnen opnemen en gebruiken in een WHERE
clausule
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;
Als u echt een door komma's gescheiden tekenreeks moet invoeren, kunt u hetzelfde verzamelingstype definiëren en de tekenreeks vervolgens ontleden om de verzameling te vullen met iets als Tom Kyte's str2tbl
functie
. Maar dat zal minder efficiënt zijn dan om te beginnen een collectie doorgeven.