Idealmente, invece di passare una singola stringa composta da valori separati da virgole, dovresti passare in una raccolta. Se hai qualcosa come
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
quindi potresti passare quella raccolta nella tua procedura e usarla in un WHERE
clausola
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;
Se hai davvero bisogno di passare una stringa separata da virgole, puoi definire lo stesso tipo di raccolta e quindi analizzare la stringa per popolare la raccolta utilizzando qualcosa come Tom Kyte str2tbl
funzione
. Ma sarà meno efficiente che passare una raccolta per cominciare.