Записи и коллекции в PL/SQL

Страницы работы

Содержание работы

Записи и коллекции в PL/SQL

Записи и коллекции являются составными структурами данных. Записи очень похожи на строки в таблицах баз данных (БД). Коллекция – это структура данных, похожая на одномерный массив. В PL/SQL используются три типа коллекций: ассоциативные массивы, вложенные таблицы и массивы VARRAY.

1.  Записи в PL/SQL

Организация данных в виде записей позволяет выполнять различные операции не только над их отдельными элементами, но и над записью как единым целым.

1.1. Объявление записей

§  на основе курсора

§  на основе таблицы базы данных

§  вручную, используя оператор TYPE . . . RECORD

1.1.1.Объявление записей на основе курсора

DECLARE

    CURSOR c_stan IS

          SELECT * FROM stations WHERE nod=2;

    r_stan   c_stan%ROWTYPE;

DECLARE

    TYPE t_c_stan IS REF CURSOR RETURN stations%ROWTYPE;

    c_stan t_c_stan;

    r_stan   c_stan%ROWTYPE;

BEGIN

    FOR  r_stan IN (SELECT * FROM stations WHERE nod=2)  LOOP

                 DBMS_OUTPUT.LINE_PUT(‘Station is ’|| r_stan.name);

    END LOOP;

END;

1.1.2. Объявление записей на основе таблицы

DECLARE

    r_sal     study.sal%ROWTYPE;

1.1.3. Записи, определяемые программистом

    TYPE имя_типа     IS RECORD (

имя_поля1          тип_данных1,

имя_поля2          тип_данных2,

. . .

имя_поляN         тип_данныхN ) ;

§ Скалярный тип данных (VARCHAR2, NUMBER и т.д.)

§ Подтип, определяемый программистом

§ Тип, на основе уже определенной структуры данных (%TYPE, %ROWTYPE)

§ Тип коллекции PL/SQL

§ Тип REF CURSOR

имя_записи   тип_записи;

DECLARE

    TYPE r_sal_totl     IS RECORD (

sal_att           study.sal%ROWTYPE,

curr_date     DATE       :=  sysdate,

ords_cnt      NUMBER(4),

ords_sum    NUMBER(9,2) )  DEFAULT  null ) ;

rSal          r_sal_totl;

 1.2. Обработка записей

Независимо от метода определения записи приемы работы с ней всегда одинаковы. Обрабатываться может либо вся запись целиком, либо каждое отдельное поле.

 1.2.1. Операции над записями

§  копирование содержимого одной записи в другую (записи должны быть однотипными)

§  присваивание записи значения NULL

§  передача записи процедуре или функции в качестве аргумента

§  возврат записи из функции

DECLARE

rSal_tab   study.sal%ROWTYPE;

CURSOR c_sal IS  SELECT * FROM study.sal;

rSal_cur   c_sal %ROWTYPE;

BEGIN

. . .

rSal_tab  :=  rSal_cur;

END;

PROCEDURE output_ord(rOrd_in IN ord%ROWTYPE) IS

rOrd   ord %ROWTYPE  :=  rOrd_in;

BEGIN

DBMS_OUTPUT.PUT_LINE(‘Date order is ’|| rOrd.odate);

END;

§  Нельзя использовать синтаксис ISNULL для проверки, все ли поля записи  имеют значение NULL. Это можно сделать лишь проверкой каждого поля

Похожие материалы

Информация о работе