如何使用数组作为绑定变量

时间:2014-01-08 23:33:19

标签: sql oracle11g bind bulk

我有以下数组,将根据一些外部标准填充。

TYPE t_column IS TABLE OF TABLE_1.COLUMN_1%TYPE INDEX BY PLS_INTEGER;
ar_column t_column;

现在,我想将此ar_column用于另一个游标,我该如何绑定它?

我正在寻找像select * from table1 where column in (ar_colum[0],ar_colum[1] ...);(它的伪代码)

这样的东西

1 个答案:

答案 0 :(得分:3)

在SQL语句中使用PL / SQL集合需要一些额外的步骤。必须创建数据类型,而不是简单地将其声明为PL / SQL块的一部分。 SQL中不存在关联数组,必须在某些时候将其转换为嵌套表或varray。并且必须使用TABLE运算符来转换数据。

create table table1(column_1 number);
insert into table1 values (1);
commit;

create or replace type number_nt is table of number;

declare
    ar_column number_nt := number_nt();

    v_count number;
begin
    ar_column.extend; ar_column(ar_column.last) := 1;
    ar_column.extend; ar_column(ar_column.last) := 2;

    select count(*)
    into v_count
    from table1
    where column_1 in (select * from table(ar_column));

    dbms_output.put_line('Count: '||v_count);
end;
/

Count: 1