Oracle:将关联数组传递给嵌套表,以便在C#的SQL语句中使用

时间:2016-02-17 19:17:59

标签: c# arrays oracle

我正在尝试将一组数字传递给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;
/

1 个答案:

答案 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);

在代码中,只有当数组至少有一个值时,才必须将集合作为数组传递(重要)。