mysql触发器调用存储过程出错_mysql 触发器中调用存储过程

想要在MYSQL的触发器中调用存储过程,但是IDE提示:

0A000 Not allowed to return a result set from a trigger

触发器代码如下:

DELIMITER $$

CREATE TRIGGER tri_ContactCompany_Insert AFTER INSERT

ON contactcompany FOR EACH ROW

# 创建时间:2019年6月27日 17:43:52

# 功能简介:表 contactcompany 的 INSERT 触发器

BEGIN

# 1. 新增行后修改本行的字段 categoryNames,以及对应的多行数据表 contactcompanyver

SELECT @sid := NEW.sid, @categories := NEW.categories

FROM NEW;

CALL usp_TriContactCompanyInsert(@sid,@categories);

END;$$

DELIMITER ;

触发器中调用的存储过程代码如下:

delimiter $$

# 下面的 `root`@`%`表示允许任意机器上通过用户root使用本存储过程

CREATE PROCEDURE `usp_TriContactCompanyInsert`(IN sid VARCHAR(50),IN categories VARCHAR(100))

# 创建时间:2019年6月27日 12:33:18

# 功能简介:表ContactCompany新增一行记录时,更新表contactcompanyver中的数据

# 将表 ContactCompany 字段 categories 中的值按照英文逗号分隔形成多行

BEGIN

# 0. 创建临时表保存中间数据

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;$$

上面给出的提示是说触发器中不能使用存储过程?

那么我想要在触发器中执行一系列逻辑,这些逻辑要写不少代码,又不想直接写在触发器中(这个触发器中以后可能还会追加其他逻辑)

我的目标是将一系列逻辑构成一个功能,然后在触发器中调用,要如何实现这个效果?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值