Как я могу передать через запятую значение в операторе выбора курсора, где предложение - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть следующий блок, в котором есть курсор и запрос выбора.Я хочу передать вывод select, который разделен запятыми в операторе select курсора, в предложение where.Я знаю, что приведенный ниже код выдаст ошибку из-за запроса SQL в разделе «Объявление», но как мне этого добиться, используя массив или коллекцию.

здесь, столбец идентификатора - это номер

фрагмент кода:

declare
test varchar2(30);
SELECT LISTAGG(value, ', ') WITHIN GROUP (ORDER BY value2) into test from table3 where value2=12;
cursor c1 (select * from table where id in (test))
begin
for i in c1 loop
null;
end loop;
end;

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Можно использовать коллекцию и оператор MEMBER OF:

Установка Oracle :

CREATE TYPE IntegerList  AS TABLE OF NUMBER(8,0);
/

CREATE TABLE table1 ( value, value2 ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 3, 4 FROM DUAL UNION ALL
SELECT 5, 3 FROM DUAL UNION ALL
SELECT 7, 2 FROM DUAL;

CREATE TABLE table2 ( id, value ) AS
SELECT 1, 11 FROM DUAL UNION ALL
SELECT 2, 22 FROM DUAL UNION ALL
SELECT 3, 33 FROM DUAL UNION ALL
SELECT 7, 77 FROM DUAL;

PL / SQL :

DECLARE
  test IntegerList;
  c1 SYS_REFCURSOR;
BEGIN
  SELECT value
  BULK COLLECT INTO test
  FROM   table1;

  FOR r IN ( SELECT * FROM table2 WHERE id MEMBER OF test ) LOOP
    DBMS_OUTPUT.PUT_LINE( r.id || ', ' || r.value );
  END LOOP;
END;
/

Выход :

1, 11
3, 33
7, 77

дБ <> скрипка здесь

0 голосов
/ 20 февраля 2019

Зачем вам это вообще нужно?

Вы можете просто написать, выбрав:

Select * from table where id in (select value from table3 where value2=12)

Редактировать:

Также вам нужночтобы открыть курсор c1, чтобы он работал AFAIK.

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