Вход/Регистрация
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
вернуться

Борри Хелен

Шрифт:

* Выходные аргументы используются для возвращения значений из хранимых процедур вызвавшим их объектам. Недоступны в триггерах.

Любой из этих типов переменных может быть использован в теле хранимой процедуры везде, где может появиться выражение. Им может присваиваться значение литерала или значения, полученного из запроса или в результате вычисления выражения.

Использование доменов

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

Маркер двоеточия (:) для переменных

В операторах SQL задавайте для имен переменных префикс в виде двоеточия (:), когда:

* переменная используется в операторе SQL;

* переменная получает значение в конструкции [FOR] SELECT ... INTO.

Опускайте двоеточие во всех других ситуациях.

! ! !

ПРИМЕЧАНИЕ. Никогда не задавайте префикс двоеточия для контекстных переменных.

. ! .

Операторы присваивания

Процедура присваивает значения переменным с использованием синтаксиса:

переменная = выражение;

выражение может быть любой допустимой комбинацией переменных, операторов и выражений, оно может содержать вызовы внешних функций (UDF) и функций SQL, включая функцию GEN_IDO для увеличения и получения значения генератора.

Следующий фрагмент кода выполняет некоторые присваивания:

. . .

WHILE (SI < 9) DO

BEGIN

SI = SI + 1; /* арифметическое выражение */

IF (SUBSTRING(SMONTH FROM 1 FOR 1) = 'R') THEN

BEGIN

RESPONSE = 'YES'; /* простая константа */

LEAVE;

END

SMONTH = SUBSTRING(SMONTH FROM 2); /* функциональное выражение */ END

. . .

Переменным и аргументам должны присваиваться значения того типа данных, с каким они были объявлены. Числовым переменным должны присваиваться числовые значения, а строковым - строковые значения. Хотя Firebird и выполняет автоматическое преобразование типов в некоторых случаях, желательно использовать явное преобразование, чтобы избежать непредвиденных несоответствий типов.

Более подробную информацию о явном преобразовании и о конвертировании типов данных см. в главах 8 и 21.

Локальные переменные

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

Вам следует всегда инициализировать ваши переменные насколько возможно раньше в вашей процедуре. В Firebird 1.5 вы можете объявлять и инициализировать переменную в одном операторе. Например, каждый следующий оператор допустим для объявления переменной вида счетчик и инициализации ее нулем:

. . .

DECLARE VARIABLE COUNTER1 INTEGER DEFAULT 0;

DECLARE VARIABLE COUNTER2 INTEGER = 0;

Примеры использования локальных переменных

Следующая процедура иллюстрирует фрагмент австралийской шутки о правильности пословицы: "Никогда не ешь свинину, если в названии месяца есть буква R". Она возвращает мнение по поводу полученной даты. Для иллюстрации в ней объявляется одна локальная переменная, которая используется для получения стартового условия для цикла WHILE, и другая - для управления количеством повторов цикла.

CREATE PROCEDURE IS_PORK_SAFE (CHECK_MONTH DATE)

RETURNS (RESPONSE CHAR(3))

AS

DECLARE VARIABLE SMONTH VARCHAR(9);

DECLARE VARIABLE SI SMALLINT;

BEGIN

SI = 0;

RESPONSE = ' NO'

SELECT

CASE (EXTRACT (MONTH FROM :CHECK MONTH) )

WHEN 1 THEN 'JANUARY'

WHEN 2 THEN ' FEBRUARY'

WHEN 3 THEN 'MARCH'

WHEN 4 THEN 'APRIL'

WHEN 5 THEN 'MAY'

WHEN 6 THEN 'JUNE'

WHEN 7 THEN ' JULY'

WHEN 8 THEN 'AUGUST'

WHEN 9 THEN 'SEPTEMBER'

WHEN 10 THEN 'OCTOBER'

WHEN 11 THEN 'NOVEMBER'

WHEN 12 THEN 'DECEMBER'

END

FROM RDB$DATABASE

INTO :SMONTH;

WHILE (SI < 9) DO

BEGIN

SI = SI + 1;

IF (SUBSTRING(SMONTH FROM 1 FOR 1) = 'R') THEN

BEGIN

RESPONSE = 'YES';

LEAVE;

END

SMONTH = SUBSTRING(SMONTH FROM 2);

END

END ^

COMMIT ^

SET TERM;^

  • Читать дальше
  • 1
  • ...
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: