Idealmente, en lugar de pasar una sola cadena compuesta de valores separados por comas, pasaría una colección. Si tienes algo como
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
entonces podría pasar esa colección a su procedimiento y usarla en un WHERE
cláusula
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;
Si realmente necesita pasar una cadena separada por comas, puede definir el mismo tipo de colección y luego analizar la cadena para completar la colección usando algo como str2tbl
de Tom Kyte función
. Pero eso va a ser menos eficiente que pasar una colección para empezar.