В идеалния случай, вместо да подадете единичен низ, съставен от стойности, разделени със запетая, бихте предали колекция. Ако имате нещо като
CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
тогава можете да прехвърлите тази колекция във вашата процедура и да я използвате в WHERE
клауза
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;
Ако наистина трябва да предадете низ, разделен със запетая, можете да дефинирате същия тип колекция и след това да анализирате низа, за да попълните колекцията, като използвате нещо като str2tbl
на Tom Kyte функция
. Но това ще бъде по-малко ефективно от подаването на колекция като начало.