Ошибка при инициализации коллекции оракулов

У меня есть следующий автономный код, который дает следующую ошибку. Кажется, я не могу найти, где мне нужно инициализировать коллекцию.

create or replace type address_type is object 
( 
  address_line varchar2(100),
  city    varchar2(100), 
  state   varchar2(100)
)
/
create or replace type emp_rec_type is object
        (
                emp_name        varchar2(100),
                addr_rec        address_type
        )
 /
 create or replace type emp_arr is table of emp_rec_type
 /
 create table employees
 (
        emp_name varchar2(100),
        addr_rec address_type
 )
 /

insert into employees values ( 'dave', address_type ( '30 br','br','nj'));
commit;
-- Create a function to return an array
create or replace function get_emp_rec ( p_name in varchar2 )
return
        emp_arr
is
    i       integer;
    l_arr   emp_arr := emp_arr();
begin
    i := 1;
    l_arr.extend;

    l_arr(l_arr.last).emp_name := 'a';
    l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
    return l_arr;
end;
/

выберите emp_name из таблицы ( get_emp_rec( 'dave')) * * ОШИБКА в строке 1: ORA-06530: ссылка на неинициализированный композитный ORA-06512: в "DBADMIN.GET_EMP_REC", строка 22

1 ответ

Решение

Вы должны инициализировать emp_rec_type в коллекции.

Эти две линии

 l_arr(l_arr.last).emp_name := 'a';
 l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');

заменить на эту линию

l_arr(l_arr.last) := emp_rec_type('a', address_type ( 'a','b','c'));
Другие вопросы по тегам