| { CONTAINS SQL | NO SQL | READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
тело_подпрограммы: оператор программы SQL
COMMENT — это расширение MySQL. Она используется для описания хранимой подпрограммы, и данная информация отображается с помощью оператора SHOW CREATE PROCEDURE.
LANGUAGE указывает на то, что тело процедуры написано на SQL.
NOT DETERMINISTIC. Это информационная характеристика. Процедура считается «детерминированной«, если она всегда дает тот же результат для одних и тех же входных параметров, иначе она является «не детерминированной».
CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
CONTAINS SQL означает, что в хранимой процедуре MySQL нет никаких заявлений, которые считывают или записывают данные. Например, заявления SET @x = 1 или DO RELEASE_LOCK(‘abc’), они выполняются, но не считывают и не записывают данные. Это значение по умолчанию, если не указано другое значение характеристики.
NO SQL означает, что процедура не содержит операторов SQL.
READS SQL DATA — процедура содержит операторы, которые считывают данные (например, SELECT), но не содержит операторов, которые записывают данные.
MODIFIES SQL DATA-означает, что подпрограмма содержит операторы, которые могут записывать данные (например, INSERT или DELETE).
DEFINER_|_INVOKER}__Значение_SQL_SECURITY'>SQL SECURITY {DEFINER | INVOKER}
Значение SQL SECURITY может быть определено либо как SQL SECURITY DEFINER, либо как SQL SECURITY INVOKER. Оно указывает, выполняется ли подпрограмма с использованием привилегий аккаунта, указанного в условии DEFINER, или аккаунта пользователя, который осуществляют MySQL вызов хранимой процедуры. Этот аккаунт должен иметь разрешение на доступ к базе данных, с которой связана подпрограмма. Значение по умолчанию DEFINER. Пользователь, который запускает процедуру, должен иметь привилегию EXECUTE, если процедура выполняется в контексте безопасности DEFINER.
Все перечисленные блоки характеристик имеют значения по умолчанию.
Пример выполнения задания для предметной области «Запись на прием»:
Для выполнения нескольких операций с данными создадим функцию, которая будет выводить сообщение. После DELIMITER нельзя использовать символ \\. Система выдаст ошибку. Поэтому используем другие символы. Функция называется hello(). Эта функция как аргумент принимает символьное значение. И так же возвращает результат типа char.
Рис. 16.1. Создание функции и её использование.
Вызвать функцию можно через оператор select. Конечно же как аргумент этой функции пишем текст.
Можно также использовать системные функции и получить результат.
Рис. 16.2. Использование созданной и системной функций.
Создадим другую функцию. При создании функций можно применять разные инструкции. В данном примере используется инструкция WHILE.
Do'stlaringiz bilan baham: |