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

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

Life-Hack

Хранимые процедуры 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 производим вызов нашей процедуры

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

Источник

Report Page