Типы данных, переменные, константы и выражения PL/SQL

Типы данных, доступные в PL/SQL

Кроме типов данных Oracle7, PL/SQL поддерживает несколько дополнительных типов данных и позволяет использовать в своих конструкциях некоторые основные типы с большим диапазоном.

Тип данных     Описание
-------------- ---------------------------------------------------------------
BINARY_INTEGER Этот тип данных и его подтипы NATURAL и POSITIVE применяются для
               создания переменных и констант, которые хранят число со знаком.
               Двоичные целые числа могут принимать значения в диапазоне от -2
               в 31 степени до 2 в 31 степени минус 1.
BOOLEAN        Принимается для создания переменных и констант, в которых
               хранятся логические значения TRUE и FALSE.
CHAR           Есть подтипы CHARACTER и STRING. Максимальный размер 32767.
NUMBER         Есть подтипы DEC, DECIMAL, DOUBLE, PRECISION, FLOAT, INT,
               INTEGER, NUMERIC, REAL и SMALLINT.
RECORD         Используется для создания пользовательских типов записей базы
               данных.
TABLE          Служит для создания табличных типов данных PL/SQL.
VARCHAR2       Есть подтип VARCHAR. Максимальный размер 32767.
col%TYPE       Используется для определения типа данных столбца или переменной
               по типу данных другого столбца или переменной, к имени которого
               или которой (col) приписан суффикс %TYPE.
tab%ROWTYPE    Используется для определения типа данных записи по типу данных
               столбцов таблицы, к имени которой (tab) приписан суффикс
               %ROWTYPE.

Рассмотрим подробнее типы данных TABLE и RECORD, позволяющие создавать одномерные массивы и записи, широко используемые в программах PL/SQL.

Таблицы PL/SQL

Таблица PL/SQL – это одномерный массив с неограниченным числом строк. Для объявления этого массива (таблицы PL/SQL или TABLE) необходимо сначала определить его тип данных.

Для описания типа данных TABLE используется синтаксис:

TYPE type_name IS TABLE OF { column_type | variable%TYPE |

table.column%TYPE } [NOT NULL] INDEX BY BINARY_INTEGER;

где «type_name» – спецификатор типа, используемый в последующих объявлениях таблиц PL/SQL, и «column_type» – любой из скалярных типов данных: CHAR, DATE или NUMBER. С помощью атрибута %TYPE можно установить «type_name» соответствующим типу данных какой-либо переменной (variable) или столбца (table.column).

Имя (например, name_plsql_table), которое описывается табличным типом данных, называется таблицей PL/SQL. Это описание, размещаемое в разделе DECLARE, имеет вид: name_plsql_table type_name;
Ссылки на строки таблицы PL/SQL осуществляются аналогично ссылкам на элементы одномерного массива: name_plsql_table(index), где index принадлежит типу BINARY_INTEGER. Например, для ссылки на третью строку в таблице PL/SQL «ename_tab» следует написать: ename_tab(3).

Для присвоения значения конкретной строке таблицы PL/SQL используется синтаксис: name_plsql_table(index) := expr;

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

Записи PL/SQL

Record PL/SQL – это совокупность полей, каждое из которых должно иметь уникальное имя (в пределах записи). Эти поля могут принадлежать различным типам данных.

Если создаваемая запись (sotr) соответствует описанию столбцов какой-либо базовой таблицы (например, kadry), то ее объявление можно осуществить в разделе DECLARE с помощью атрибута %ROWTYPE: sotr kadry%ROWTYPE;

В противном случае для объявления записи необходимо сначала определить ее тип данных. Для описания типа данных RECORD используется синтаксис:

TYPE type_name IS RECORD

( field_name1 {field_type | variable%TYPE | table.column%TYPE

| table%ROWTYPE} [NOT NULL],

field_name2 {field_type | variable%TYPE | table.column%TYPE

| table%ROWTYPE} [NOT NULL],

…);

где «type_name» – спецификатор типа, используемый в последующих объявлениях записей PL/SQL, и «field_type» – любой тип данных. С помощью атрибута %TYPE можно установить «type_name» соответствующим типу данных какой-либо переменной (variable) или столбца (table.column). Атрибут %ROWTYPE позволяет определить поле как запись, соответствующую описанию столбцов какой-либо базовой таблицы.

При объявлении типа записи можно присвоить ее полям некоторые значения. Если же для поля вводится ограничение NOT NULL (для предотвращения назначения пустых значений), то этому полю надо обязательно присвоить значение. Например:

TYPE SotrRecTyp IS RECORD (nomer NUMBER(4) NOT NULL := 1001,

familiy CHAR(20), dolgnost CHAR(14), otdel NUMBER(3) := 102);

Объявление создаваемой записи (например, name_plsql_record) производится в разделе DECLARE и имеет вид: name_plsql_record type_name;
Ссылки на отдельные поля записи осуществляются так: name_plsql_record.field_name;
Для присвоения значения конкретному полю записи используется синтаксис: name_plsql_record.field_name := expr;

Примеры использования записей в программах PL/SQL приведены ниже.
Для ввода в таблицу PL/SQL значений из какого-либо столбца базовой таблицы или представления, а также для выборки значений из таблицы PL/SQL, необходимо использовать цикл.

Переменные, константы и выражения PL/SQL

В программах PL/SQL могут использоваться переменные и константы, описываемые в разделе DECLARE с помощью конструкции вида: variable_name [CONSTANT] type_name [NOT NULL] [ { := | DEFAULT } expr ]
Например:

    birthdate  DATE;
    emp_count  SMALLINT := 0;
    emp_count  SMALLINT DEFAULT 0;
    acct_id    VARCHAR2(5) NOT NULL := 'AP001';
    pi         CONSTANT REAL := 3.14159;
    area       REAL := pi * radius**2;
    valid_id   BOOLEAN;
    valid_id   VARCHAR2(5);  -- недопустимое вторичное описание  valid_id
    i, j, k    SMALLINT;     -- нельзя описывать список; надо:
                             -- i SMALLINT; j  SMALLINT; k  SMALLINT;
    credit     REAL(7,2);
    debit      credit%TYPE;  -- тип данных аналогичный типу данных "credit"

Оставить комментарий