Как передать вложенную таблицу из пакета в процедуру? Ошибка: PLS-00488: должен быть типом
В спецификации пакета объявлена коллекция с фиксированный набором значений:
create or replace PACKAGE CATEGORYS_MONITORING IS
TYPE t_rec is table of varchar2(200 byte);
t_categorys t_rec:=t_rec('Beverages General','Beauty General');
PROCEDURE GENERATE_ROWS(l_category_name varchar2);
end CATEGORYS_MONITORING;
Надо передать коллецию подпрограмме, которая после проверки запустит процедуру:
declare
subtype trep is CATEGORYS_MONITORING.t_categorys;
CA1 CATEGORYS_MONITORING.t_categorys;
CA2 trep;
begin
for iter in CA2.first .. CA2.last
loop
IF CA2(iter)='Beverages General' THEN
CATEGORYS_MONITORING.GENERATE_ROWS(CA2(iter));
END IF;
end loop;
end;
Ошибка:PLS-00488:'CATEGORYS_MONITORING.T_CATEGORYS' должен быть типом.
Так как типы, между собой не совместимы, использовал subtype и к t_categorys, но всё равно ошибка.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Что надо делать, если ошибка не совсем понятна? Надо создать пример, где ошибка воспроизводится, и упрощать его, пока причина ошибки не станет очевидной (или не исчезнет).
Упрощённо то, что в вопросе:
declare
type t is table of varchar2(8);
a t := t ('aaa','bbb');
subtype subt is a;
begin null;
end;
/
ORA-06550: line 4, column 21:
PLS-00488: 'A' must be a type
а- это то, что содержит коллекция, или сущность коллекцииt- это то, что только определяет, что может содержать коллекция, или тип коллекции
То есть, когда поймёте разницу, получится:
declare
type t is table of varchar2(8);
a t := t ('aaa','bbb');
subtype subt is t;
b subt := a;
begin null;
end;
/
PL/SQL procedure successfully completed.