Инициализировать тип записи PLSQL инициализировать вложенную таблицу типа записи

Я использую Oracle 11g.

получение ошибки

в этой области не существует функции с именем "T_TAB"

declare
TYPE t_tab IS RECORD
(
col1 number,
col2 number
);
TYPE t_tab_arr IS TABLE OF t_tab;
l_tab1 t_tab_arr := t_tab_arr (t_tab(1,2),t_tab(2,3));
BEGIN
NULL;
END;
/

person sakeesh    schedule 01.03.2021    source источник
comment
+1 за публикацию вашей версии Oracle. Очень немногие плакаты делают - хотя (как и в вашем случае) версия часто оказывается решающей.   -  person mathguy    schedule 01.03.2021


Ответы (1)


В Oracle 18 ваш код работает (db‹›fiddle).

В Oracle 11g нет метода конструктора для типов данных PL/SQL RECORD (как и для типов данных SQL OBJECT); вместо этого вам нужно объявить значения RECORD и присвоить значения их полям, прежде чем помещать их в коллекцию:

DECLARE
  TYPE t_tab IS RECORD(
    col1 number,
    col2 number
  );
  TYPE t_tab_arr IS TABLE OF t_tab;
  
  l_t1 T_TAB;
  l_t2 T_TAB;
  l_tab1 T_TAB_ARR;
BEGIN
  l_t1.col1 := 1;
  l_t1.col2 := 2;
  l_t2.col1 := 3;
  l_t2.col2 := 4;
  l_tab1 := T_TAB_ARR( l_t1, l_t2 );
  
  FOR i IN 1 .. l_tab1.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE( i || ': (' || l_tab1(i).col1 || ', ' || l_tab1(i).col2 ||')' );
  END LOOP;
END;
/

Что выводит:

1: (1, 2)
2: (3, 4)

db‹›fiddle здесь

person MT0    schedule 01.03.2021