Как привязать массивы к переменной в PL/SQL

Как привязать массивы к переменной в PL/SQL.

Например, у меня есть массив ниже:

array_col3 = {1,2,3,4,5,6,7}

теперь я хочу select из таблицы на основе array.

select * from tabA where col3 in (select * from (:array_col3));

person Abhi85    schedule 11.07.2017    source источник
comment
Возможный дубликат массива в предложении IN() oracle PLSQL   -  person XING    schedule 12.07.2017
comment
Похоже, вы определяете массив на каком-то языке, отличном от PL/SQL, и хотите передать его как переменную связывания. Если это так, вам нужно использовать динамический SQL. В этом другом потоке SO есть нужное вам решение.   -  person APC    schedule 12.07.2017


Ответы (3)


Надеюсь, этот приведенный ниже фрагмент поможет.

SET serveroutput ON;
DECLARE
  lv sys.odcivarchar2list:=sys.odcivarchar2list('1','2','3','4');
  lv1 sys.odcivarchar2list;
BEGIN
  SELECT * BULK COLLECT
  INTO lv1
  FROM
    ( SELECT LEVEL LVL FROM DUAL CONNECT BY LEVEL < 10
    )A
  WHERE A.lvl IN
    (SELECT COLUMN_VALUE FROM TABLE(LV)
    ) ;
  dbms_output.put_line(lv1.COUNT);
END;

###############################OUTPUT##########################################

anonymous block completed
4

###############################OUTPUT##########################################
person Avrajit Roy    schedule 12.07.2017

Вам нужно выражение table():

select * from tabA where col3 in (select * from table((:array_col3)));

или, альтернативно, оператор member of:

select * from tabA where col3 member of :array_col3;
person William Robertson    schedule 12.07.2017

В plsql это не так просто. Вы должны использовать типы, взгляните на пакет dbms_utility.

Пример:

Va dbms_utility.number_array;
 Va(1) := 1;
 Va(2) := 2;
person Leandro Franciscato    schedule 11.07.2017
comment
Это не то, о чем просил @Abhi85. - person Avrajit Roy; 12.07.2017
comment
Хммм, он спросил: Как связать массивы в переменную в PL/SQL. Но ваш ответ выглядит более полным. - person Leandro Franciscato; 12.07.2017