Процедурный язык запросов PL/SQL, страница 2

·  Символьные литералы и литералы даты должны быть заключены в апострофы

·  Числовые литералы могут быть представлены в простой (12.3) или научной (1.23E1) записи

·  В тексте программного блока могут присутствовать комментарии:

o  многострочные – несколько строк между /* и */

o  однострочные – одна строка после  -- и до конца строки

Разработка анонимного блока PL/SQL

Блок PL/SQL может содержать до трех секций, каждая из которых начинается с определенного ключевого слова (DECLARE – декларативная секция, BEGIN – выполняемая секция, EXCEPTION – секция обработки исключений). Заканчивается блок ключевым словом END, после которого обязательно должна следовать точка с запятой. После ключевых слов, разделяющих секции блока, точка с запятой не ставится. Обязательными ключевыми словами являются BEGIN и END.

DECLARE

...

BEGIN

...

EXCEPTION

...

END;

Объявление переменных

Идентификатор – это лексемы, представляющие элементы программирования, такие как переменные, константы, пользовательские типы данных, курсоры, исключения. Имя идентификатора должно начинаться с буквы и содержать не более 30 символов (букв, цифр, символов подчеркивания (_), доллара ($) или фунта (#)).

Прежде, чем использовать идентификаторы в блоке PL/SQL, их надо объявить.

идентификатор [CONSTANT] тип_данных [NOT NULL] [{:= | DEFAULT} выражение];

идентификатор – имя идентификатора

CONSTANT – объявляет идентификатор константой. Значение идентификатора нельзя изменять, поэтому необходимо инициализировать

тип_данных – тип данных (может быть скалярный или составной)

NOT NULL – идентификатор должен содержать значение, поэтому его необходимо инициализировать

выражение – любое выражение PL/SQL (литерал, другая переменная или выражение), используемое для инициализации идентификатора. Для присваивания значения идентификатору можно использовать оператор := или зарезервированное слово DEFAULT

Рекомендуется объявлять по одному идентификатору в строке, хотя можно объявить сразу несколько идентификаторов. Объявление каждого идентификатора обязательно должно заканчиваться точкой с запятой.

Пример анонимного блока PL/SQL, в котором объявлены три идентификатора. В выполняемой секции блока не выполняется никаких действий, поэтому указано ключевое слово NULL.

SQL> DECLARE

  2  var1 CHAR(3);

  3  var2 CONSTANT DATE := SYSDATE;

  4  var3 NUMBER NOT NULL := 123;

  5  BEGIN

  6     NULL;

  7  END;

  8  /

PL/SQL procedure successfully completed.

При попытке объявить идентификатор-константу, не инициализировав его при объявлении, возникает ошибка.

SQL> DECLARE

  2  var1 CHAR(3);

  3  var2 CONSTANT DATE;

  4  BEGIN

  5     NULL;

  6  END;

  7  /

DECLARE

*

ERROR at line 1:

ORA-06550: line 3, column 1:

PLS-00322: declaration of a constant 'VAR2' must contain an initialization assignment

ORA-06550: line 3, column 6:

PL/SQL: Item ignored

Типы данных

Для объявления переменных, констант и указателей можно использовать два типа данных:

§  Скалярные, которые допускают только одно значение переменной в определенный момент времени и не имеют внутренних компонент

§  Составные, которые могут содержать несколько значений одного типа одновременно и имеют внутренние компоненты

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

Скалярные типы данных можно разделить на четыре категории: числовые типы, символьные, тип даты и времени, и логический тип. Числовой и символьный типы имеют подтипы.

Тип

Подтип

Описание

Ограничение значений

CHAR(s)

CHARACTER

Символьные строки фиксированной длины

От 0 до 32767 байт. По умолчанию 1.

STRING

ROWID

NCHAR

VARCHAR2(s)

VARCHAR

Символьные строки переменной длины

От 0 до 32767 байт. По умолчанию 1.

NVARCHAR2#1

NUMBER(p, s)

DEC

Числа с фиксированной точкой:

p – общее число значащих цифр

s - масштаб

Общее число значащих цифр – от 1 до 38 (по умолчанию – максимальное число, поддерживаемое системой). Для REAL – от 1 до 18

Масштаб – от –84 до 127 (по умолчанию 0)

DECIMAL

NUMERIC

DOUBLE PRECISION

Числа с плавающей точкой:

p – общее число значащих цифр

s - масштаб

REAL

NUMBER(p)

FLOAT

INTEGER

Целые числа:

p – общее число значащих цифр

INT

SMALLINT

BINARY_INTEGER

(±2 147 483 647)

NATURAL

Неотрицательное целое

От 0 до 2 147 483 647

NATURALN

Неотрицательное целое, определенное как NOT NULL

POSITIVE

Положительное целое

От 1 до 2 147 483 647

POSITIVEN

Положительное целое, определенное как NOT NULL

SIGNTYPE

Предназначен для трехзначной логики

-1; 0; 1

LONG

Строки символов переменной длины

От 0 до 32760 байт

RAW(s)

LONG RAW

Неинтерпретируемые двоичные данные

От 0 до 32760 байт

LOB

BFILE

Внешние двоичные данные

От 0 до 4 гигабайт

BLOB

Внешние или внутренние двоичные данные

CLOB

Внешние или внутренние односимвольные данные

NCLOB

Внешние или внутренние многосимвольные данные

DATE

Внутреннее представление даты

От 1 января 4712 года до н.э. до 31 декабря 4712 года н.э.

BOOLEAN

Логические значения

TRUE, FALSE, NULL

Если Вы используете переменную для хранения значения столбца, Вы должны следить, чтобы тип данных этой переменной соответствовал типу данных столбца. Чтобы не заботиться о соответствии типов данных столбца таблицы базы данных и переменной PL/SQL, можно объявить переменную на основе столбца базы данных или на основе ранее заданной переменной.

Для объявления типа данных на основе столбца или другой переменной используется атрибут %TYPE:

·  имя_таблицы.имя_столбца%TYPE – для столбца базы данных

·  имя_переменной%TYPE – для ранее объявленной переменной

PL/SQL определяет тип данных и размер такой переменной во время компиляции блока, поэтому тип и точность переменной всегда совместимы с типом данных и размером столбца. Ограничение NOT NULL столбца не распространяется на переменные, объявленные с помощью атрибута %TYPE.

SQL> DECLARE

  2  var1 emp.ename%TYPE;

  3  var2 var1%TYPE;

  4  BEGIN

  5     NULL;

  6  END;

  7  /

PL/SQL procedure successfully completed.

Составные типы данных

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

·  TABLE (таблица PL/SQL)

o  Таблица PL/SQL подобна одномерному массиву и содержит два компонента (Рисунок 2):

§  Первичный ключ BINARY_INTEGER, по которому индексируется таблица

§  Столбец данных скалярного типа

o  Таблица PL/SQL не ограничена, поэтому может динамически расти