Ввод массива Oracle PL/SQL в параметр конвейерной функции
Я новичок в PL/SQL. Я создал конвейерную функцию внутри пакета, которая в качестве параметра принимает массив чисел (вложенная таблица).
Но у меня возникли проблемы при попытке запустить его через SQL-запрос. Пожалуйста, смотрите ниже
мой входной массив
CREATE OR REPLACE TYPE num_array is TABLE of number;
объявление моей функции
CREATE OR REPLACE PACKAGE "my_pack" as
TYPE myRecord is RECORD(column_a NUMBER);
TYPE myTable IS TABLE of myRecord;
FUNCTION My_Function(inp_param num_array) return myTable PIPELINED;
end my_pack;
мое определение функции
CREATE OR REPLACE PACKAGE BODY "my_pack" as
FUNCTION My_Function(inp_param num_array) return myTable PIPELINED as
rec myRecord;
BEGIN
FOR i in 1..inp_param.count LOOP
FOR e IN
(
SELECT column_a FROM table_a where id=inp_param(i)
)
LOOP
rec.column_a := e.column_a;
PIPE ROW (rec);
END LOOP;
END LOOP;
RETURN;
END;
end my_pack;
Вот последний код, который я пробовал запустить с жабы. Но это не работает
declare
myarray num_array;
qrySQL varchar2(4000);
begin
myarray := num_array(6341,6468);
qrySQL := 'select * from TABLE(my_pack.My_Function(:myarray))';
execute immediate qrySQL;
end;
Поэтому мой вопрос заключается в том, как я могу передать массив в эту конвейерную функцию из TOAD или SQL Developer. Пример был бы очень полезен.
Спасибо
1 ответ
Ошибка довольно очевидна, у вас есть переменная связывания, которой вы ничего не присвоили. Вам нужно передать ваш фактический массив с:
qrySQL := 'select * from TABLE(my_pack.My_Function(:myarray))';
execute immediate qrySQL using myarray;
Возможно, более полезно, если вы хотите вызвать его из PL/SQL, использовать статический SQL в качестве курсора:
set serveroutput on
declare
myarray num_array;
begin
myarray := num_array(6341,6468);
for r in (select * from TABLE(my_pack.My_Function(myarray))) loop
dbms_output.put_line(r.column_a);
end loop;
end;
/
Или просто запросите статически как тест для фиксированных значений:
select * from TABLE(my_pack.My_Function(num_array(6341,6468)));
SQL Fiddle с некоторыми незначительными изменениями в функции для устранения ошибок, я думаю, пришел от редактирования к публикации.