Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

6.1.3.Переменные

Переменные используются в программах PL/pgSQL для хранения изменяемых данных заранее определенного типа.

Типы данных

Переменные PL/pgSQL могут относиться к любому из стандартных типов данных SQL (например, integer или char). Помимо типов данных SQL, в PL/pgSQL также предусмотрен дополнительный тип RECORD, предназначенный для хранения записей без указания полей  эта информация передается при сохранении данных в переменной. Дополнительная информация о типе данных RECORD приводится ниже. Типы данных SQL были описаны в разделе 3.1.5. Самые распространенные типы PL/pgSQL: Boolean, text, char, integer, double precision, date, time.

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

Все переменные программного блока должны быть предварительно объявлены с ключевым словом DECLARE. Если переменная не инициализируется при объявлении, по умолчанию ей присваивается псевдозначение SQL NULL.

ПРИМЕЧАНИЕ. Как будет показано в разделе «Передача управления», в одной из команд цикле FOR предусмотрена возможность инициализации управляющей переменной. Переменную цикла FOR не нужно заранее объявлять в секции DECLARE того блока, в котором находится цикл. Таким образом, переменные цикла FOR составляют единственное исключение из правила, согласно которому все переменные должны объявляться в начале соответствующего блока.

Переменные, объявленные в блоке, доступны во всех его вложенных блоках, но обратное неверно: переменные, объявленные во вложенном блоке, уничтожаются в конце этого блока и недоступны во внешнем блоке. Синтаксис объявления переменной приведен ниже.

имя_переменной тип_данных [ := значение ];

Таким образом, объявление состоит из имени и типа переменной (следующих именно в этом порядке) и завершается символом точки с запятой (;).

В листинге 6.6 приведены объявления переменных типов integer, varchar (число в круглых скобках обозначает максимальную длину строки в символах) и float.

Листинг 6.6. Объявление переменных

CREATE FUNCTION identifier (arguments) RETURNS type AS '

DECLARE

-- Объявить числовую переменную типа integer.

subject_id integer;

-- Объявить строковую переменную переменной длины.

book_title varchar(10);

-- Объявить вещественную числовую переменную.

book price float;

BEGIN

команды;

END;

' LANGUAGE 'plpgsql';

Объявление переменной также может содержать дополнительные модификаторы. Ключевое слово CONSTANT указывает на то, что вместо переменной определяется константа. Пример определения константы рассматриваются в листинге 6.7 в этом разделе.

Ключевые слова NOT NULL означают, что переменной не может присваиваться псевдозначение NULL. Если переменной, объявленной с модификатором NOT NULL, в программном блоке присваивается псевдозначение NULL, происходит ошибка времени выполнения. Поскольку при объявлении без инициализации всем переменным автоматически присваивается псевдозиачение NULL, переменные с модификатором NOT NULL обязательно должны инициализироваться.

Ключевое слово DEFAULT определяет значение по умолчанию для переменной. Вместо него можно воспользоваться оператором (:=), эффект будет тем же.

Ниже приведен расширенный синтаксис объявления переменной:

имя_переменной [ CONSTANT ] тип_данных [ NOT NULL ]

[ { DEFAULT | := } значение ];

В листинге 6.7 приведены примеры объявлений целочисленной константы, равной 5, переменной со значением 10, которой не может быть присвоено псевдозначение NULL, и символьной переменной, содержащей символ «а».

Листинг 6.7. Объявления переменных

CREATE FUNCTION example_function О RETURNS texi AS '

DECLARE

-- Объявление целочисленной константы,

-- инициализированной значением 5.

five CONSTANT integer := 5;

-- Объявление целочисленной переменной,

-- инициализированной значением 10.

-- Переменной не может присваиваться NULL.

ten integer NOT NULL := 10;

-- Объявление символьной переменной,

-- инициализированной значением "а".

letter char DEFAULT ''а'';

BEGIN

-- Функция возвращает символ и прекращает работу.

return letter;

END;

' LANGUAGE 'plpgsql':

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]