Хранимые Процедуры (STORED PROCEDURES)
Прототип хранимой процедуры
CREATE [OR REPLACE] PROCEDURE procedure_name
[( parameter1 [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype
[, parameter2 [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype
[, parameter(n+1) [IN][OUT] [NOCOPY] sql_datatype | plsql_datatype )]]]
[ AUTHID DEFINER | CURRENT_USER ] IS
declaration_statements
BEGIN
execution_statements
[EXCEPTION]
exception_handling_statements
END [procedure_name];
/
Создание процедуры
Для создания процедуры используется оператор CREATE PROCEDURE.
Упрощенный синтаксис оператора CREATE PROCEDURE выглядит следующим образом.
CREATE [OR REPLACE] PROCEDURE procedure_name
[(имя_параметра [IN | OUT | IN OUT] тип [, …])]
IS | AS
BEGIN
тело процедуры
END имя_процедуры
OR REPLACE – если процедура с таким же именем уже хранится в базе данных, то с данным параметром, она просто заменит существующую. Без этого параметра, если процедура с данным именем уже существует, появится сообщение об ошибке.
IN | OUT | IN OUT – специфицирует режим параметров. Для каждого параметра можно выбрать один из следующих режимов:
- IN – режим по умолчанию для параметра. К моменту выполнения параметр должен иметь значение и это значение не изменится в результате выполнения процедуры.
- OUT – специфицируется для параметров, значения которых устанавливаются только в теле процедуры.
- IN OUT - специфицируется для параметров, которые могу иметь значение к моменту вызова процедуры, но эти значения могут быть изменены в теле процедуры.
- AUTHID - определяет, с какими правами будет исполняться процедура: с правами ее владельца (создателя) или же с правами вызывающего пользователя.
Вызов процедуры
Для вызова процедуры испоьзуется оператор CALL
CALL procedure_name ([( parameter1 , [parameter(n+1)]]);
Получение информации о процедурах
Получить информацию о процедурах можно из представления user_procedures.
Информацию обо всех процедурах, которым вы имеете доступ, можно получить из представления all_procedures
SELECT ojbect_name, aggregate, parallel
FROM user_procedures
WHERE objectt_name='procedure_name';
Удаление процедуры
DROP PROCEDURE procedure_name;
Просмотр ошибок в процедуре
Если во время создания процедуры база данных сообщает об ошбике, можно увидеть эти ошибки, задав команду SWHOW ERRORS.