Хранимые процедуры 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.
Присвоим переменой 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.
Зная это можно установить значения для этих переменных следующим образом:
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 добавленного комментария
Возвращаемся на вкладку Routines и нажимаем на надпись Execute
Появится форма
Указываем значения передаваемых параметров: текст ответа и id комментария, после чего нажимаем на кнопку с надписью Go.
Если ошибок нет, то открываем страницу и смотрим на результат.
Второй способ выполнить процедуру на сервере.
Открываем вкладку SQL
С помощью оператора CALL производим вызов нашей процедуры
Если ошибок нет, то должны увидеть новый комментарий на странице.
Вызов хранимой процедуры на клиенте
Читайте также: