我正在尝试将一组数字传递给oracle存储过程,以便我可以批量处理。我必须传递关联数组,然后用内容填充嵌套表。有没有更好的方法将数组或varchar2数组传递给oracle中的存储过程?我这样做了吗? :)
我也看过临时表和管道函数,作为下面这种工作方法的替代方案。
create or replace type t_number_table as table of number;
create or replace package numberarray_pkg
as
type t_numbers is table of number index by pls_integer;
type t_cursor is ref cursor;
procedure passarray(
paymentids in t_numbers,
io_cursor in out t_cursor);
end numberarray_pkg;
/
create or replace package body numberarray_pkg
as
procedure passarray(paymentids in t_numbers, io_cursor in out t_cursor) as
v_number_table t_number_table;
v_cursor t_cursor;
begin
v_number_table := t_number_table();
v_number_table.extend(paymentids.count);
for i in 1 .. paymentids.count loop
v_number_table(i) := paymentids(i);
end loop;
open v_cursor for
select column_value from table(v_number_table);
io_cursor := v_cursor;
end passarray;
end numberarray_pkg;
/
答案 0 :(得分:0)
在身体创建的脚本中,你必须声明一个默认变量:
type t_numbers is table of number index by pls_integer;
nullNumber t_numbers;
在程序规范中:
procedure passarray(
paymentids in t_numbers default nullNumber,
io_cursor in out t_cursor);
在代码中,只有当数组至少有一个值时,才必须将集合作为数组传递(重要)。