mysql触发器调用存储过程出错_mysql 触发器中调用存储过程
想要在MYSQL的觸發(fā)器中調用存儲過程,但是IDE提示:
0A000 Not allowed to return a result set from a trigger
觸發(fā)器代碼如下:
DELIMITER $$
CREATE TRIGGER tri_ContactCompany_Insert AFTER INSERT
ON contactcompany FOR EACH ROW
# 創(chuàng)建時間:2019年6月27日 17:43:52
# 功能簡介:表 contactcompany 的 INSERT 觸發(fā)器
BEGIN
# 1. 新增行后修改本行的字段 categoryNames,以及對應的多行數據表 contactcompanyver
SELECT @sid := NEW.sid, @categories := NEW.categories
FROM NEW;
CALL usp_TriContactCompanyInsert(@sid,@categories);
END;$$
DELIMITER ;
觸發(fā)器中調用的存儲過程代碼如下:
delimiter $$
# 下面的 `root`@`%`表示允許任意機器上通過用戶root使用本存儲過程
CREATE PROCEDURE `usp_TriContactCompanyInsert`(IN sid VARCHAR(50),IN categories VARCHAR(100))
# 創(chuàng)建時間:2019年6月27日 12:33:18
# 功能簡介:表ContactCompany新增一行記錄時,更新表contactcompanyver中的數據
# 將表 ContactCompany 字段 categories 中的值按照英文逗號分隔形成多行
BEGIN
# 0. 創(chuàng)建臨時表保存中間數據
CREATE TEMPORARY TABLE category(sid VARCHAR(100),name VARCHAR(100)) CHARSET = utf8;
# 1. 刪除歷史數據
DELETE FROM contactcompanyver WHERE sid=sid;
# 2. 向表 contactcompanyver 寫入多行數據
INSERT INTO category
SELECT t2.id,t2.name
FROM
(
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(categories,',',help_topic_id+1),',',-1) AS categoryId
FROM
mysql.help_topic
WHERE
help_topic_id < LENGTH(categories)-LENGTH(REPLACE(categories,',',''))+1
) t1
LEFT OUTER JOIN contactcategory t2
ON t1.categoryId = t2.id
WHERE t2.name IS NOT NULL;
INSERT INTO contactcompanyver
(sid, category)
SELECT sid, name
FROM category;
# 3. 修改表 ContactCompany 中的字段 categoryNames 為名稱串聯
SELECT @categoryNames := group_concat(name)
FROM category;
update contactcompany SET categoryNames = @categoryNames WHERE sid=sid;
END;$$
上面給出的提示是說觸發(fā)器中不能使用存儲過程?
那么我想要在觸發(fā)器中執(zhí)行一系列邏輯,這些邏輯要寫不少代碼,又不想直接寫在觸發(fā)器中(這個觸發(fā)器中以后可能還會追加其他邏輯)
我的目標是將一系列邏輯構成一個功能,然后在觸發(fā)器中調用,要如何實現這個效果?
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的mysql触发器调用存储过程出错_mysql 触发器中调用存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经历就是财富——总结我的26岁
- 下一篇: flex学习笔记--关于拖动