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

Борри Хелен

Шрифт:

Можно ли автору есть свинину в ее день рождения?

EXECUTE PROCEDURE IS_PORK_SAFE ('2004-05-16');

RESPONSE

=========

NO

! ! !

СОВЕТ. Если бы это была серьезная процедура, в SQL есть более быстрый способ получения того же результата. Например, вместо цикла WHILE вы можете просто проверить переменную SMONTH:

IF (SMONTH CONTAINING 'R') THEN RESPONSE = 'YES' ELSE RESPONSE = 'NO'

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

. ! .

Входные аргументы

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

Например, следующий фрагмент процедуры определяет один входной параметр, чтобы сообщить процедуре, какая страна должна отыскиваться:

CREATE PROCEDURE SHOW_JOBS_FOR_COUNTRY (

COUNTRY VARCHAR(15))

. . .

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

Входные аргументы недопустимы в триггерах.

Выходные аргументы

Выходной аргумент (параметр) используется для задания значения, возвращаемого из процедуры вызвавшему приложению или модулю PSQL. Если задается множество возвращаемых значений, объявляйте эти аргументы в скобках, отделяя их друг от друга запятыми, следом за ключевым словом RETURNS В заголовке процедуры. Один раз объявленные, они могут использоваться в теле процедуры везде, где могут появиться выражения.

Следующий код завершает определение процедуры, представленной предыдущим фрагментом. Он определяет три элемента данных для возвращения в виде виртуальной таблицы вызвавшему модулю:

CREATE PROCEDURE SHOW_JOBS_FOR_COUNTRY (

COUNTRY VARCHAR (15) )

RETURNS (

CODE VARCHAR (11) ,

TITLE VARCHAR (25) ,

GRADE SMALLINT)

AS

BEGIN

FOR SELECT JOB_CODE, JOB_TITLE, JOB_GRADE FROM job

WHERE JOB_COUNTRY = : COUNTRY

INTO :CODE, :TITLE, :GRADE

DO

BEGIN /* начало цикла */

CODE = 'CODE: ' || CODE;

/* дает немного информации о значении */

SUSPEND; /* выводит одну строку цикла */

END

END ^

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

! ! !

СОВЕТ. Всегда инициализируйте выходные параметры до начала обработки данных, которые могут быть присвоены параметрам.

. ! .

Контекстные переменные NEW и OLD

Триггеры могут использовать два полных набора контекстных переменных, представляющих "старое" и "новое" значение каждого столбца таблицы, OLD .имя-столбца ссылается на текущее или предыдущее значение именованного столбца в изменяемой или удаляемой строке. Это не имеет смысла для добавления данных, NEW.имя-столбца ссылается на значение, передаваемое запросом на изменение или добавление. Не имеет смысла для удаления. Если операция обновления не изменяет некоторые столбцы, то для таких столбцов переменная NEW будет иметь то же самое значение, что и переменная OLD. Контекстные переменные часто используются для сравнения значений столбцов до и после изменения.

Контекстные переменные могут применяться везде, где могут быть использованы обычные переменные. Значение NEW для столбца строки может быть изменено только до соответствующего действия. Значения OLD являются значениями только для чтения. Подробности и примеры использования см. в главе 31.

! ! !

СОВЕТ. Поскольку Firebird создает триггеры для реализации ограничений CHECK, контекстные переменные OLD и NEW могут использоваться непосредственно в ограничениях CHECK, например:

ALTER TABLE EMPLOYEE

ADD CONSTRAINT EMPLOYEE_SALARY_RAISE_CK

CHECK ((OLD.SALARY IS NULL) OR (NEW.SALARY > OLD.SALARY));

. ! .

Операторы SELECT ... INTO

Используйте оператор SELECT С предложением INTO для поиска значений столбцов в таблицах и сохранения их в локальных переменных или выходных аргументах.

Одиночный оператор SELECT

Обычный оператор SELECT В PSQL должен возвращать не более одной строки из базы данных- стандартный одиночный (singleton) оператор SELECT. ЕСЛИ оператор возвращает более одной строки, то будет выдано исключение. Предложение ORDER BY недопустимо в одиночном SELECT кроме случая, когда используется оператор SELECT FIRST 1. (Информацию об использовании квалификатора FIRST см. В znaee 21.)

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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