SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.01.2019 19:15:40

besserg
Участник
Зарегистрирован: 13.01.2019
Сообщений: 2

Создание TRIGGER из PROCEDURE

Добрый день, уважаемые форумчане!

Сегодня весь день бьюсь над проблемой создания триггера из процедуры..
Ничего не могу понять, почему не получается...
Исходные данные:
Server version: 5.7.24 - MySQL Community Server (GPL).
Текст самой процедуры:


CREATE DEFINER=`dbuser`@`%` PROCEDURE `cr_trg`(IN `cid` INT)
BEGIN

 set @tbname1 = CONCAT('client_',CAST(cid as char(32)));
 set @tbname2 = CONCAT('discount_card_',CAST(cid as char(32)));
 set @trgname = CONCAT('add_discount_',CAST(cid as char(32)));
 set @qstr = concat('
 DELIMITER $$
CREATE TRIGGER `'
,@trgname,'` AFTER INSERT ON `',@tbname1,'` FOR EACH ROW BEGIN
 insert into '
,@tbname2,' set ',@tbname2,'.clinic_id = NEW.clinic_id, ',@tbname2,'.client_id = NEW.id;
END
$$
DELIMITER ;
'
);
/* select @qstr; */

prepare qry from @qstr;
execute qry;
deallocate prepare qry;

END
 

Если взять аутпут строки:

DELIMITER $$ CREATE TRIGGER `add_discount_1` AFTER INSERT ON `client_1` FOR EACH ROW BEGIN insert into discount_card_1 set discount_card_1.clinic_id = NEW.clinic_id, discount_card_1.client_id = NEW.id; END $$ DELIMITER ;
 

и выполнить его, например в phpmyadmin или любом другом клиенте - то триггер прекрасно создается...
Но если я вызываю процедуру:
CALL dbname.cr_trg(1)

То получаю вот такую ошибку:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$ CREATE TRIGGER `add_discount_1` AFTER INSERT ON `client_1` FOR EACH' at line 1

Не могу понять где ошибка?
Есть у кого-нибудь соображения как ее победить?

Отредактированно besserg (13.01.2019 19:16:28)

Неактивен

 

#2 13.01.2019 21:48:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Создание TRIGGER из PROCEDURE

Насколько мне известно, MySQL не позволяет создавать триггеры внутри процедур. См. также обсуждение на официальном форуме:
https://forums.mysql.com/read.php?98,58 … msg-588793

Неактивен

 

#3 13.01.2019 23:24:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Создание TRIGGER из PROCEDURE

В процедуре нельзя создать триггер

MariaDB [test]> create procedure xxx () create trigger qw after insert on city for each row set @a = 1;
ERROR 1303 (2F003): Can't create a TRIGGER from within another stored routine



За некоторым исключением (в список которых не входит create trigger) запросы, не разрешенные в подготовленных запросах SQL, также не разрешены в сохраненных программах. А с помощью подготовленных запросов можно создавать индексы, базы данных, таблицы, пользователей, представления, но нельзя создать триггер, см SQL Syntax Allowed in Prepared Statements

Неактивен

 

#4 14.01.2019 18:58:09

besserg
Участник
Зарегистрирован: 13.01.2019
Сообщений: 2

Re: Создание TRIGGER из PROCEDURE

Добрый вечер!

На самом деле я ведь даже был на той страничке документации о которой пишет уважаемый vasya...
И не обратил внимание, что там нет триггеров...
Ну ладно, значить пойдем другим путем!
В любом случае - спасибо за Ваши ответы! smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson