Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для студентов РУБД / Лаб раб 4 курс.doc
Скачиваний:
60
Добавлен:
21.03.2016
Размер:
635.39 Кб
Скачать

Синтаксис alter procedure и alter function

ALTER {PROCEDURE | FUNCTION} sp_name

[characteristic ...]

characteristic:

{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

| SQL SECURITY { DEFINER | INVOKER }

| COMMENT 'string'

Эта инструкция может использоваться, чтобы изменить характеристики сохраненной процедуры или функции.

Синтаксис drop procedure и drop function

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

Эта инструкция используется, чтобы удалить сохраненную процедуру или функцию. Предложение IF EXISTSявляется расширением MySQL. Это предотвращает ошибку, если процедура или функция не существует. Будет произведено предупреждение, которое может просматриваться с помощью командыSHOW WARNINGS.

Синтаксис команды call

CALL sp_name([parameter[,...]])

Инструкция CALLвызывает процедуру, которая была определена предварительно, с помощью командыCREATE PROCEDURE.

CALLможет передавать обратно значения к параметрам использования вызывающего оператора, которые объявлены какOUTилиINOUT. Это также вернет число строк, на которые воздействовал запрос.

Чтобы вернуть значение из процедуры, использующей параметр OUTилиINOUT, передайте параметр посредством переменной пользователя, и затем проверьте значение переменной после возврата из процедуры. Следующая процедура имеет параметрOUT, который процедура устанавливает в текущую (актуальную) версию сервера, и значениеINOUT, которое процедура увеличивает:

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)

BEGIN

# Set value of OUT parameter

SELECT VERSION() INTO ver_param;

# Increment value of INOUT parameter

SET incr_param = incr_param + 1;

END;

Перед вызовом процедуры, инициализируйте переменную, которая будет передана как параметр INOUT. После вызова процедуры, значения в двух переменных будут установлены или изменены:

mysql> SET @increment = 10;

mysql> CALL p(@version, @increment);

mysql> SELECT @version, @increment;

@version

@increment

5.0.25-log

11

Синтаксис составного оператора begin ... End

[begin_label:] BEGIN

[statement_list]

END [end_label]

Синтаксис BEGIN ... ENDиспользуется для записи составных инструкций, которые могут появляться внутри сохраненных подпрограмм и триггеров. Составная инструкция может содержать много инструкций, взятых в ключевые словаBEGINиEND. Здесьstatement_listпредставляет список инструкций. Каждая инструкция внутриstatement_listдолжна быть завершена операторным разделителем точкой с запятой (;). Обратите внимание, что списокstatement_listфакультативный, что означает, что пустая составная инструкция (BEGIN END) допустима.

Использование многих инструкций требует, чтобы пользователь был способен послать операторные строки, содержащие операторный разделитель ;. Это обработано в клиенте командной строкиmysqlкомандойdelimiter. Изменение разделителя конца инструкции;(например, на//) позволяет;использоваться в стандартном теле.

Составная инструкция может быть помечена. end_labelне может быть дан, еслиbegin_labelтакже не присутствует. Если оба присутствуют, они должны быть те же самые.

Факультативное предложение [NOT] ATOMICеще не обеспечивается. Это означает, что никакие точки сохранения транзакций не установлены в начале блока команды, и предложениеBEGIN, используемое в этом контексте не имеет никакого эффекта на текущей (актуальной) транзакции.