Група характеристик збережених процедур
Синтаксис збережених процедур допускає використання наступних характеристик characteristic У визначенні CREATE PROCEDURE та CREATE FUNCTION:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| SQL SECURITY {DEFINER | INVOKER}
|COMMENT 'string'
Дані ключові слова описують характеристики збережених процедур і функцій. Вони розміщуються після списку параметрів, але до початку тіла збереженої процедури. Характеристика LANGUAGE SQL поки не має особливого сенсу і повідомляє, що процедура написана на мові SQL (приклад).
Приклад:
CREATE PROCEDURE characteristics ()
LANGUAGE SQL
BEGIN
SELECT RAND();
END //
У наступних версіях MySQL планується надати можливість створення збережених процедур з використанням мови, відмінної від SQL. Швидше за все, одним з перших підтримуваних мов стане РНР, т. к. базовий механізм РНР невеликий за розмірами, безпечний у відношенні потоків і легко вбудовується. Рекомендується використовувати ключове слово LANGUAGE SQL вже зараз для забезпечення сумісності з майбутніми версіями MySQL та іншими СУБД.
Ключове слово DETERMINISTIC дозволяє повідомити оптимізатору, що процедура завжди повертає один і той же результат для одних і тих самих вхідних параметрів, в іншому випадку слід використовувати ключове слово NOT DETERMINISTIC (приклад).
Приклад:
CREATE PROCEDURE characteristics ()
LANGUAGE SQL
NOT DETERMINISTIC
BEGIN
SELECT RAND();
END //
Зауваження:
- На даний момент ключове слово DETERMINISTIC розпізнається, але не використовується оптимізатором MySQL.
Ключове слово SQL SECURITY може бути записано в двох формах: SQL SECURITY DEFINER і SQL SECURITY INVOKER. Якщо використовується форма SQL SECURITY DEFINER, то процедура викликається з привілеями користувача, що створив її, при використанні SQL SECURITY INVOKER процедура викликається з привілеями користувача, що викликає процедуру оператором CALL (приклад).
Приклад:
CREATE PROCEDURE characteristics ()
LANGUAGE SQL
NOT DETERMINISTIC
SQL SECURITY INVOKER
BEGIN
SELECT RAND();
END //
Зауваження:
- Якщо ключове слово SQL SECURITY не вказано, за замовчуванням встановлюється режим SQL SECURITY DEFINER-Процедура виконується з привілеями створившого користувача.
Для виконання процедури, і її власник, і її користувач повинні мати доступ до бази даних, в якій збережена процедура, крім того, вони обоє повинні мати привілей EXECUTE, незалежно від того, в якій формі використано ключове слово SQL SECURITY.
Ключове слово comment (наступний приклад) дозволяє позначити процедуру коротким описом, який відобразить оператор SHOW CREATE PROCEDURE і SHOW CREATE FUNCTION.
Зауваження:
- Ключове слово COMMENT є розширенням MySQL і може не підтримуватися іншими СУБД.
Приклад:
CREATE PROCEDURE characteristics ()
LANGUAGE SQL
NOT DETERMINISTIC
SQL SECURITY INVOKER
COMMENT 'Функція повертає випадкове значення'
BEGIN
SELECT RAND();
END //
SHOW CREATE PROCEDURE characteristics//
Procedure: characteristics sql_mode:
Create Procedure: CREATE PROCEDURE 'shop*.'characteristics'()
SQL SECURITY INVOKER
COMMENT * Функция возвращает случайное значение'
BEGIN
SELECT RAND();
END