Московский государственный университет имени М.В.Ломоносова
Опубликован: 05.01.2004 | Доступ: свободный | Студентов: 9480 / 1249 | Оценка: 4.04 / 3.84 | Длительность: 10:03:00
ISBN: 978-5-94774-539-9
Лекция 12:

Коллекции и записи

< Лекция 11 || Лекция 12: 123 || Лекция 13 >

Записи

Записью называется набор элементов, хранимых в полях записи . Каждое поле имеет свое имя и тип.

Записи нельзя сравнивать на равенство или неравенство и на эквивалентность значению NULL.

Запись может быть объявлена на базе существующей структуры таблицы или как новый тип.

Для объявления записи, имеющей структуру, соответствующую строке таблицы базы данных, используется атрибут %ROWTYPE.

Объявление нового типа "запись" может иметь следующее формальное описание:

TYPE type_name IS RECORD
(field_declaration
	[, field_declaration]...);

Описание поля ( field_declaration ) указывается как:

field_name field_type
[[NOT NULL] {:= | DEFAULT} expression]

Параметр type_name задает имя определяемого типа; field_type указывает тип поля как любой тип PL/SQL за исключением REF CURSOR ; expression определяет значение инициализации.

Как и для коллекций, для создания записи следует сначала определить тип RECORD, а затем объявить запись данного типа.

Тип "запись" существует только на время выполнения программы и не может быть сохранен в базе данных в отличие от типов TABLE и VARRAY.

Для доступа к любому полю записи используется следующая нотация: record_name.field_name. Если field_name также является записью, то для доступа к его вложенному полю используется та же нотация: record_name.field_name.field1_name и т.д.

В выражениях языка PL/SQL выполнять присваивание значения можно как отдельно полю, так и всей записи.

Выполнять присвоение значения всей записи можно двумя способами:

  • использовать в качестве присваиваемого значения запись того же типа;
  • задать запись в качестве INTO -переменной в SQL-операторе SELECT или FETCH.

Например:

DECLARE
   - Определение типа
   TYPE T_rec IS RECORD (
      f1 tbl1.f1%TYPE,
      f2 VARCHAR2(15), 
      f3 REAL(7,2));
   - Тип на основе строки таблицы
   rec3 tbl1%ROWTYPE;
   - Объявление записи   
   rec1 T_rec;
   f_sum1 REAL;

   FUNCTION sum_f3 (n INTEGER)
   RETURN T_rec IS
      rec2 T_rec;
      BEGIN
      - :
      - Функция возвращает значение
      - типа запись
      RETURN rec2;
   END;
BEGIN
   - Вызов функции
   rec1 := sum_f3(4);
   f_sum1 := sum_f3(4).f3;
   SELECT * INTO rec3 FROM tbl1
   WHERE f1 = 1;
END;
< Лекция 11 || Лекция 12: 123 || Лекция 13 >