Иван Сергеевич Задворьев

Язык PL/SQL


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

повышает надежность программ.

      Виды типов данных

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

      В PL/SQL имеются скалярные и составные типы данных:

      данные скалярных типов состоят из одного неделимого (атомарного) значения (логические значения, числа, даты, строки);

      данные составных типов состоят из нескольких значений (записи и коллекции).

      Скалярные типы данных PL/SQL

      Объявления типов данных PL/SQL находятся в пакете STANDARD, находящемся в схеме пользователя SYS:

      package STANDARD AUTHID CURRENT_USER is

      type BOOLEAN is (FALSE, TRUE);

      type DATE is DATE_BASE;

      type NUMBER is NUMBER_BASE;

      subtype FLOAT is NUMBER; – NUMBER(126)

      subtype REAL is FLOAT; – FLOAT(63)

      subtype INTEGER is NUMBER(38,0);

      subtype INT is INTEGER;

      subtype DEC is DECIMAL;

      …

      subtype BINARY_INTEGER is INTEGER range '-2147483647'..2147483647;

      subtype NATURAL is BINARY_INTEGER range 0..2147483647;

      …

      type VARCHAR2 is NEW CHAR_BASE;

      subtype VARCHAR is VARCHAR2;

      subtype STRING is VARCHAR2;

      …

      Видно, что объявленные в пакете STANDARD типы данных PL/SQL либо соответствуют типам данных Oracle SQL (_BASE-типы), либо вводятся как их подтипы (subtype).

      Отметим наличие типа данных BOOLEAN, которого нет в Oracle SQL. Значения типа BOOLEAN можно, например, использовать в коде следующего вида:

      l_amount_negative_flag BOOLEAN := amount<0;

      IF l_amount_negative_flag THEN … END IF;

      Существенным отличием типов данных PL/SQL и Oracle SQL является большая максимальная длина значений типов CHAR и VARCHAR2, предназначенных для представления строк фиксированной и переменной длины:

      для VARCHAR2 в PL/SQL максимальная длина значений находится в диапазоне от 1 до 32 767 байт (в Oracle SQL до версии Oracle 12c максимальная длина VARCHAR2 была до 4000 байт, в Oracle 12c она была увеличена также до 32 767 байт);

      для CHAR в PL/SQL максимальная длина значений находится в диапазоне от 1 до 32 767 байт (в Oracle SQL до версии Oracle 12c максимальная длина CHAR была до 2000 байт, в Oracle 12c она была увеличена также до 32 767 байт).

      Записи PL/SQL

      Записи PL/SQL относятся к составным типам данных и определяются как наборы атрибутов, связанных определенными отношениями. Атрибуты записи могут быть как скалярных типов данных, так и других составных типов – другими записями и коллекциями.

      Запись PL/SQL объявляется как пользовательский тип данных с помощью ключевого слова RECORD, в целом работа с записями PL/SQL похожа на работу с записями в языке Pascal или структурами в языке C:

      DECLARE

      TYPE t_person IS RECORD

      (name VARCHAR2 (100),

      secname VARCHAR2 (100),

      surname VARCHAR2 (100),

      born DATE);

      l_person t_person;

      BEGIN

      l_person.surname := 'Ильин';

      l_person.name := 'Виктор';

      l_person.secname := 'Семенович';

      l_person.born := TO_DATE('07.08.1969','dd.mm.yyyy');

      print(l_person);

      END;

      Назначение записей PL/SQL:

      считывание в записи PL/SQL строк результирующих выборок SQL-запросов (при объявлении записей PL/SQL на основе таблиц и курсоров с помощью атрибута %ROWTYPE);

      объединение в одну структуру нескольких параметров процедур и функций (вместо большого числа параметров скалярных типов удобнее передавать в процедуры и