Массивы в Oracle SQL - PullRequest
       9

Массивы в Oracle SQL

2 голосов
/ 10 сентября 2009

Вот упрощенная версия псевдокода, которую я хотел бы делать в PL-SQL (Oracle):

DECLARE
  mylist as ARRAY
BEGIN
  mylist (1) := '1'
  mylist (2) := '3'
  ...
  SELECT *
  FROM aTable
  WHERE aKey IN mylist;
END;

SELECT должен возвращать совпадающие записи для mylist (1), mylist (2) и т. Д. Он должен быть похож на ORing для всех значений, но, конечно, мы не знаем заранее, сколько значений мы получаем.

Как мне этого добиться? Я знаю, что PL / SQL имеет некоторые типы данных коллекций, но я не могу заставить их работать должным образом в инструкциях SQL.

Спасибо за любые идеи.

Ответы [ 2 ]

9 голосов
/ 10 сентября 2009

Это легко сделать с помощью функции TABLE(). Единственный улов заключается в том, что переменная массива должна использовать тип, объявленный в SQL. Это связано с тем, что SELECT использует механизм SQL, поэтому объявления PL / SQL находятся вне области действия.

SQL> create or replace type numbers_nt as table of number
  2  /

Type created.

SQL>
SQL> declare
  2      l_array numbers_nt;
  3  begin
  4      l_array := numbers_nt (7521,7566,7654);
  5      for r in ( select ename
  6                 from emp
  7                 where empno in ( select *
  8                                  from table (l_array)
  9                                 )
 10               )
 11      loop
 12          dbms_output.put_line ( 'employee name = '||r.ename);
 13      end loop;
 14  end;
 15  /
employee name = PADFIELD
employee name = ROBERTSON
employee name = BILLINGTON

PL/SQL procedure successfully completed.

SQL>
2 голосов
/ 10 сентября 2009

Пара предложений:

1.) Ключевое слово CAST SQL, которое вы можете сделать, может выполнить эту работу ... оно делает вашу коллекцию обработанной, как если бы это была таблица.

2.) Конвейерные функции. В основном функция возвращает данные, которые выглядят как таблица.

Эта ссылка обобщает параметры и содержит несколько списков кодов, объясняющих их.

http://www.databasejournal.com/features/oracle/article.php/3352091/CASTing-About-For-a-Solution-Using-CAST-and-Table-Functions-in-PLSQL.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...