Вам не нужно инициализировать переменную типа записи:
SQL> DECLARE
2 TYPE typ_rec IS RECORD (a NUMBER, b NUMBER);
3 rec typ_rec;
4 BEGIN
5 rec.a := 1;
6 rec.b := 2;
7 dbms_output.put_line(rec.a + rec.b);
8 END;
9/
3
PL/SQL procedure successfully completed
Если вы используете вложенную таблицу записей однако, необходимо инициализировать коллекцию:
SQL> DECLARE
2 TYPE typ_rec IS RECORD (a NUMBER, b NUMBER);
3 TYPE typ_tab IS TABLE OF typ_rec;
4 tab typ_tab := typ_tab(); -- initialization
5 BEGIN
6 tab.extend;
7 tab(1).a := 1;
8 tab(1).b := 2;
9 dbms_output.put_line(tab(1).a + tab(1).b);
10 END;
11/
3
PL/SQL procedure successfully completed
You могут смешивать типы записей и типы сбора (нет необходимости инициализировать varrays):
SQL> DECLARE
2 TYPE column_info IS RECORD(
3 col_name VARCHAR2(20),
4 col_value VARCHAR2(1000)
5 );
6 TYPE c_info IS VARRAY(10) OF column_info;
7 TYPE table_info IS RECORD(
8 table_name VARCHAR2(20),
9 col_info c_info
10 );
11 l_table table_info;
12 BEGIN
13 l_table.table_name := 'TABLE_NAME';
14 l_table.col_info.extend;
15 l_table.col_info(1).col_name := 'COL_NAME';
16 l_table.col_info(1).col_value := 'COL_VALUE';
17 END;
18/
PL/SQL procedure successfully completed
Для дальнейших чтение: PL/SQL collection documentation
Как вы можете видеть, вторым элементом этой накладки является тип коллекции column_info - это запись (col_name varchar2 (20), col_value varchar2 (1000)); Тип c_info - это varray (10) of column_info; Когда я присваиваю значение col_value, например: t_info.col_info (1) .col_name: = 'table_idx'; Я получаю ORA-06531: Ссылка на неинициализированную коллекцию – user1540471
Измените свой вопрос вместо добавления комментариев в комментарии. –