Погружение в базы данных Oracle

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Купить книгу

SQL без слёз

Цель книги заключается в том, чтобы научить любого человека работать с реляционными базами данных и получать из них необходимую информацию посредством выполнения SQL-запросов.

Скачать книгу

 ›  ›  ›  › Объявление записей в PL/SQL Oracle

Объявление записей в PL/SQL Oracle

В PL/SQL существует три способа объявления записей:

Запись на основе таблицы

Для объявления записи, каждое поле которой соответствует значению одноименного столбца таблицы, используется атрибут %ROWTYPE с именем таблицы. Пример объявления записи one_book, которая имеет ту же структуру, что и таблица books:

-- Таблица books
CREATE TABLE books (
  book_id         INTEGER,
  isbn            VARCHAR2(13),
  title           VARCHAR2(200),
  summary         VARCHAR2(2000),
  author          VARCHAR2(200),
  date_published  DATE,
  page_count      NUMBER
);

-- объявление записи
DECLARE
    one_book books%ROWTYPE;

Запись на основе курсора

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

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

DECLARE
    CURSOR my_books_cur IS
    SELECT * FROM books
    WHERE author LIKE '%FEUERSTEIN%';
one_SF_book my_books_cur%ROWTYPE;

Запись, определяемая разработчиком

Чтобы создать запись с нуля, то есть явно определить каждое поле, задавая его имя и тип данных, следует воспользоваться командой TYPE…RECORD. Значением поля записи, определяемой разработчиком, может быть не только скалярное значение, но и другая запись. В следующем примере определяется тип записи, содержащей информацию о писательской карьере автора книги, и объявляется экземпляр записи этого типа:

DECLARE
    TYPE book_info_rt IS RECORD (
        author books.author%TYPE,
        category VARCHAR2(100),
        total_page_count POSITIVE);
     
    steven_as_author book_info_rt;

Обратите внимание: в объявлении записи пользовательского типа атрибут %ROWTYPE не указывается. Запись в данном случае имеет тип book_info_rt.

Общий формат объявления атрибута %ROWTYPE таков:

имя_записи [имя_схемы.]имя_объекта%ROWTYPE
   [ DEFAULT|:= совместимая_запись ];

Указывать параметр имя_схемы не обязательно (если он не задан, то для разрешения ссылки используется схема, внутри которой компилируется данный код). В качестве параметра имя_объекта может использоваться явный курсор, курсорная переменная, таблица, представление или синоним. Также при объявлении можно указать необязательное значение по умолчанию, которое должно быть записью того же или совместимого типа.

Пример создания записи на основе курсорной переменной:

DECLARE
   TYPE book_rc IS REF CURSOR RETURN books%ROWTYPE;
   book_cv book_rc;
   one_book book_cv%ROWTYPE;
BEGIN

Запись также можно объявить и неявно — например, в цикле FOR с курсором. В следующем блоке кода раздел объявлений не содержит определения записи book_rec. PL/SQL автоматически объявляет запись с атрибутом %ROWTYPE:

BEGIN
   FOR book_rec IN (SELECT * FROM books)
   LOOP
      calculate_total_sales (book_rec);
   END LOOP;
END;

Метки: , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *