Переменные записей и таблиц PL / SQL - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в Oracle PL / SQL и получил код, который меня просят изменить Я просматривал документацию оракула и думаю, что знаю, что он делает, но хотел бы проверить, правильно ли мое понимание или нет.

Вот код:

TYPE array_rec_type IS RECORD (gla_sub tblName.id%type);

v_closes_sc   array_rec_type;

TYPE v_sc_type is TABLE OF v_closes_sc%TYPE INDEX BY BINARY_INTEGER;

sc_array  v_sc_type;

Вот то, что я считаю, здесь заявлено:

  • TYPE array_rec_type IS RECORD (gla_sub tblName.id% type);
    • Похоже, что коллекция объявляется с использованием типа столбца из столбца id из таблицы tblName. Это может быть число или UUID и т. Д.
  • v_closes_sc array_rec_type;
    • Создается переменная вновь созданного типа
  • TYPE v_sc_type - это TABLE OF v_closes_sc% TYPE INDEX BY BINARY_INTEGER;
    • Новый тип создается с использованием коллекции (Запись), ранее созданной для таблицы. Таблица будет иметь один столбец ID.
  • sc_array v_sc_type;
    • Создается новая переменная для хранения новой табличной переменной.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Запись не является коллекцией, поэтому ваше объяснение слегка запутано. Из документов (которые вы, вероятно, уже просматривали:

В коллекции внутренние компоненты всегда имеют один и тот же тип данных и называются элементами . ... Чтобы создать переменную коллекции, нужно либо определить тип коллекции, а затем создать переменную этого типа или использовать %TYPE.

В записи внутренние компоненты могут иметь разные типы данных и называются полями . Вы можете получить доступ к каждому полю переменной записи по его имени ... Чтобы создать переменную записи, вы должны либо определить тип RECORD, а затем создать переменную этого типа или использовать %ROWTYPE или %TYPE.

Итак, глядя на то, что вы сказали:

Вот то, что, как я считаю, здесь заявлено:

TYPE array_rec_type IS RECORD (gla_sub tblName.id%type);

Это запись , а не коллекция. В этом случае у него есть одно поле с именем gla_sub, которое действительно объявляется с использованием типа данных столбца id из таблицы tblName. Использование %type означает, что в некоторой степени вам не нужно знать, что на самом деле является типом данных, и вам, возможно, не придется менять свой код, если он изменяется (если размер столбца varchar2 равен например, увеличился).

v_closes_sc array_rec_type;

Правильно - создается переменная вновь созданного типа.

TYPE v_sc_type is TABLE OF v_closes_sc%TYPE INDEX BY BINARY_INTEGER;

- это коллекция, а именно ассоциативный массив . Это разреженный массив, члены которого являются экземпляром типа записи, объявленного выше, с числовым индексом. Это также может быть объявлено с использованием типа напрямую, как:

TYPE v_sc_type is TABLE OF array_rec_type INDEX BY BINARY_INTEGER;
sc_array v_sc_type;

Правильно - создается новая переменная этого только что объявленного типа таблицы.


Наличие типа записи с одним полем кажется немного бессмысленным, так как вы можете иметь коллекцию, основанную на типе данных столбца таблицы. Ваш существующий код будет ожидать этой структуры, поэтому ее изменение не совсем тривиально.

0 голосов
/ 26 июня 2018

Насколько я знаю, ваше понимание верно.

...