Введение в хранимые функции MySQL 5

Хранимые процедуры MySQL (часть 2)

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

И так нам осталось указать значение для последней переменной PostID. В качестве значения ей будет присвоен результат, который вернёт функция GetPostID, которую сейчас и создадим.

Создание функции

Для начала закрываем текущую форму создания процедуры, нажав на кнопку c надписью Go. Затем в этом же окне снова нажимаем на надпись Add routine, появится знакомая форма, заполним её.

Имя - GetPostID
Тип - функция
Parameters -  ComID BIGINT(20) UNSIGNED
Return type (возвращаемый тип) - BIGINT
Return length/values - 20
Return options - UNSIGNED
Definition:
BEGIN
RETURN (SELECT comment_post_ID
FROM wp_comments
WHERE comment_ID = ComID);
END;

Так же можно указать дополнительные параметры:

Is deterministic — детерминированная функция всегда возвращает один и тот же результат при одинаковых входных параметрах иначе она является не детерминированной. В нашем случае ставим галочку.

Definer и Security type параметры безопасности, в данном примере оставим их без изменений.

SQL data access имеет несколько значений:

NO SQL — не содержит sql.

Contains SQL — содержит встроенные sql функции или операторы, которые не читают, не пишут и не изменяют данные в базе данных. Например, установка значения переменной: SET name = значение;

READS SQL DATA — только чтение данных, без любой модификации данных, указывается для запроса SELECT.

MODIFIES SQL DATA — изменение или внесение данных, в базу данных, указывается для запросов: INSERT, UPDATE, но при этом не должен присутствовать запрос SELECT.

В нашей функции используется запрос SELECT, укажем READS SQL DATA.

Comment комментарий.

После того как все поля заполнены, нажимаем на кнопку с надписью Go.

форма

Возвращаемся на вкладку Routines и отредактируем нашу процедуру, нажав на кнопку edit.

edit

Присвоим переменой PostID в качестве значения результат, который вернёт функция GetPostID.

SET postID = GetPostID(ComID);

В результате окончательное тело процедуры будет таким

BEGIN
DECLARE Author tinytext DEFAULT 'admin';
DECLARE UserID bigint(20) DEFAULT 1;
DECLARE Email varchar(100);
DECLARE Date DATETIME DEFAULT NOW();
DECLARE ParentCom varchar(20);
DECLARE Approved varchar(20);
DECLARE PostID BIGINT(20);
IF Author = 'admin' THEN
SET Approved = 1;
ELSE
SET Approved = 0;
END IF;
SET ParentCom = ComID ;
SET Email = 'adm@local.local';
SET PostID = GetPostID(ComID);
INSERT INTO wp_comments (comment_author, comment_author_email,
comment_content, comment_date,
comment_date_gmt, comment_post_id,
comment_parent, comment_approved, user_id)
VALUES (Author, Email, Content, Date, Date, PostID, ParentCom,
Approved, UserID);
END;

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

Так же можно установить значения для одной или нескольких переменных в результате выполнения запроса. Например, поля: Автор, почта и id пользователя хранятся в таблице wp_users.

таблица wp_users

Зная это можно установить значения для этих переменных следующим образом:

BEGIN
-- Объявляем переменные
DECLARE Author tinytext DEFAULT 'admin';
DECLARE UserID bigint(20) DEFAULT 1;
DECLARE Email varchar(100);
-- выполнение запроса и установка значений для переменных
SELECT user_login, user_email, ID
INTO Author, Email, UserID
FROM wp_users
WHERE user_login LIKE 'adm%';
END;

Вызов хранимой процедуры

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

добавленный комментарий

Затем узнаем id добавленного комментария

id комментария

Возвращаемся на вкладку Routines и нажимаем на надпись Execute

выполнить

Появится форма

параметры процедуры

Указываем значения передаваемых параметров: текст ответа и id комментария, после чего нажимаем на кнопку с надписью Go.

установка значений

Если ошибок нет, то открываем страницу и смотрим на результат.

сообщение об отсуствие ошибок

добавленный ответ

Второй способ выполнить процедуру на сервере.

Открываем вкладку SQL

вкладка SQL

С помощью оператора CALL производим вызов нашей процедуры

вызов процедуры

Если ошибок нет, то должны увидеть новый комментарий на странице.

ошибок нет

добавленный новый ответ

Вызов хранимой процедуры на клиенте

Читайте также:

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *