Передайте коллекцию или VARRAY
вместо передачи строки через запятую:
CREATE TYPE number_list IS TABLE OF NUMBER(10,0);
Затем вы можете использовать что-то вроде:
CREATE PROCEDURE emp(
emp_ids IN number_list
)
IS
BEGIN
-- Do something with the ids like inserting them into a table
INSERT INTO employees ( id )
SELECT COLUMN_VALUE
FROM TABLE( emp_ids );
-- Or something like this:
SELECT something
INTO some_variable -- you need to define this variable first
FROM some_table
WHERE emp_id MEMBER OF emp_ids;
END;
/
Обновить
Если вы не можете ничего создать, вы можете использовать встроенную коллекцию, такую как SYS.ODCINUMBERLIST
:
CREATE PROCEDURE emp(
emp_ids IN SYS.ODCINUMBERLIST
)
IS
BEGIN
-- Do something with the ids like inserting them into a table
INSERT INTO employees ( id )
SELECT COLUMN_VALUE
FROM TABLE( emp_ids );
-- Or something like this:
SELECT something
INTO some_variable -- you need to define this variable first
FROM some_table
WHERE emp_id IN ( SELECT COLUMN_VALUE FROM TABLE( emp_ids ) );
END;
/
(Примечание: SYS.ODCI*LIST
типы - VARRAY
данные типы и не поддерживают оператор MEMBER OF
, как это делают коллекции, вместо этого вы можете получить значения из VARRAY
, используя вложенный оператор SELECT
с выражением TABLE()
коллекции.)
Однако, если вы действительно ничего не можете CREATE
, тогда вы не сможете CREATE PROCEDURE
.... не уверен, что есть какое-то решение, кроме разговора с вашим администратором базы данных.