PLSQL: использование Member с вложенной таблицей типа NUMBER - PLS-00330: недопустимое использование имени типа или имени подтипа - PullRequest
0 голосов
/ 20 марта 2019

Работа с коллекциями в plsql в первый раз.

Объявление вложенной таблицы:

TYPE nt_orders IS TABLE OF NUMBER 
INDEX BY BINARY_INTEGER;

nt_invc_orders nt_orders;

Где я использую member of

    IF( 12345 member of nt_orders) THEN
        nt_scb_temp_objects(i).invc_ref := p_invc_ref;
    END IF;

ПРИМЕЧАНИЕ: На данный момент я ввел 12345 в качестве поиска, в действительности это будет хранимое значение переменной (типа Number).

ОШИБКА: PLS-00330: недопустимое использование имени типа или имени подтипа

1 Ответ

3 голосов
/ 20 марта 2019

Ваша коллекция на самом деле не является вложенной таблицей, это ассоциативный массив. Вы должны удалить INDEX BY BINARY_INTEGER;, чтобы сделать его вложенной таблицей. Более того, функция MEMBER OF не работает с ассоциативными массивами. Вторая проблема - вы ищете элемент с типом коллекции - nt_orders в качестве правильного аргумента, что неверно. Это должна быть переменная вложенной таблицы.

declare
TYPE nt_orders IS TABLE OF NUMBER;
nt_invc_orders nt_orders := nt_orders(12345);

begin
    IF  12345 member of nt_invc_orders THEN
     dbms_output.put_line('found');
     else 
     dbms_output.put_line('not found');
    END IF;
end;
/

выход

found

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