Ошибка: PLS-00642: локальные типы коллекций не допускаются в инструкциях SQL - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу получить данные из таблицы с несколькими значениями в переменной и с предложением where для этой переменной.

Моя версия базы данных 11.1

CREATE OR REPLACE PACKAGE BODY pr_retrieve_data as
PROCEDURE FETCH_MYTABLE_DETAILS() is

TYPE ACCNT_NUMBER_TYPE IS TABLE OF MYTABLE.MYCOLUMN%TYPE;
L_ACCNT_NUMBER ACCNT_NUMBER_TYPE;

L_ACCNT_NUMBER.EXTEND(3);
L_ACCNT_NUMBER(1) := 1;
L_ACCNT_NUMBER(2) := 2;
L_ACCNT_NUMBER(3) := 3;

FOR indx in (select column1,
                    column2
             from   SOMEOTHERTABLE SOT
             WHERE  SOT.ACCNT_NUMBER IN (SELECT * FROM TABLE(L_ACCNT_NUMBER))) --The code fails here with PLS-00642 error.
LOOP

...

END LOOP;

end FETCH_MYTABLE_DETAILS;
end pr_retrieve_data;

Как я могуполучить данные из SOMEOTHERTABLE с несколькими значениями в переменной и с предложением where для этой переменной?

1 Ответ

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

Создать тип как объект схемы.Однако вы не можете наследовать тип данных из таблицы (AS TABLE OF MYTABLE.MYCOLUMN%TYPE):

CREATE OR REPLACE TYPE ACCNT_NUMBER_TYPE AS TABLE OF NUMBER;

Обратите внимание, что в более новых версиях Oracle вы можете использовать локальные типы коллекций также в SQL.Функция была введена в версии 12.1.

В вашем конкретном случае вы также можете использовать

...
WHERE SOT.ACCNT_NUMBER MEMBER OF L_ACCNT_NUMBER
...