Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR5_2015.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
187 Кб
Скачать
☆

Некоторые дополнительные сведения Использование переменных

Переменные необходимо объявлять до их использования, а также указать их тип. В СУБД Firebird нет необходимости добавлять к имени переменной префикс @, а также переменные обязательно должны быть объявлены до тела хранимой процедуры или триггера.

CREATE PROCEDURE my_procedure

AS

DECLARE VARIABLE my_variable int;

BEGIN

my_variable = 5;

END

Управляющие конструкции begin..End

Ключевые слова BEGIN и END могут использоваться для объединения нескольких операторов в один блок, например, при использовании в условном операторе IF.

GOTO

СУБД Firebird не имеет оператора GOTO. В СУБД Firebird используется более удачный механизм управления ошибками - операторWHEN...DO.

Конечно, оператор GOTO может использоваться и для других целей. В таком случае, правильное использование хранимых процедур обычно улучшает дизайн базы данных.

IF

Оператор IF..ELSE в СУБД Firebird имеет ту же семантику, что и в языках программирования, однако синтакс СУБД Firebird требует наличия ключевого слова THEN после условия.

IF (something = 'unknown')

THEN something = 'uuhhh.....';

ELSE something = 'I know! I know!';

CASE

Оператор CASE используется аналогично оператору switch языка C или оператору case языка Pascal для замены одного значения на другое. Обычно в СУБД Firebird 1.0 эту операцию можно эмулировать хранимой процедурой, возвращающей некоторое значение.

/* Выделить оператор CASE. */

CREATE PROCEDURE get_state_name ( state_code char(2) )

RETURNS ( state_name varchar(64) )

AS

BEGIN

IF (state_code = 'CA') THEN state_name = 'California';

ELSE IF (state_code = 'UT') THEN state_name = 'Utah';

ELSE state_name = 'unknown';

END

/* Это процедура-выборка. */

CREATE PROCEDURE list_states

RETURNS (state varchar(64))

AS

DECLARE VARIABLE short_state CHAR(2);

BEGIN

FOR SELECT state FROM authors INTO :short_state DO

BEGIN

EXECUTE PROCEDURE get_state_name :short_state

RETURNING_VALUES :state;

SUSPEND;

END

END

Три замечания по приведенному примеру. Во-первых, перенос является тривиальным. Во-вторых, текст получается довольно ясным. В-третьих, использование хранимой процедуры вносит большую гибкость и простоту внесения изменений логики. Предположим, оператор CASE для поля state встречается в 12 различных процедурах, и был добавлен новый штат, или что Вы неправильно написали название штата... Совершенно ясно, что лучше выполнить указанное преобразование для использования хранимой процедуры.

С версии 1.5 СУБД Firebird полностью поддерживает оператор CASE, поэтому, в принципе, необходимости перехода на использование хранимых процедур нет.

WHILE

Оператор WHILE существует в СУБД Firebird . Не существует операторов BREAK или CONTINUE, но их можно эмулировать при помощи дополнительных конструкций. СУБД Firebird требует наличия ключевого слова DO после условия цикла.

WHILE (i < 3) DO

BEGIN

i = i + 1;

j = j * 2;

END

RETURN

В СУБД Firebird существует оператор EXIT, который передает управление на заключительный END хранимой процедуры. Однако здесь нет скрытой возвращаемой переменной, поэтому, если Вам необходимо вернуть некоторое значение, Вы должны явно объявить возвращаемую переменную в процедуре.

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