mysql 触发器中调用存储过程

发布于 2022-09-11 20:44:34 字数 1942 浏览 25 评论 0

  • 想要在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;$
  • 上面给出的提示是说触发器中不能使用存储过程?
  • 那么我想要在触发器中执行一系列逻辑,这些逻辑要写不少代码,又不想直接写在触发器中(这个触发器中以后可能还会追加其他逻辑)
  • 我的目标是将一系列逻辑构成一个功能,然后在触发器中调用,要如何实现这个效果?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情感失落者 2022-09-18 20:44:34

SELECT @sid := NEW.sid换成SELECT NEW.sid into @sid试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文