【问题标题】:Syntax error when add trigger添加触发器时出现语法错误
【发布时间】:2017-11-06 08:59:46
【问题描述】:

我有程序:

    CREATE PROCEDURE channge_max_priority()
    BEGIN
      update feeds set max_post_priority =
        (
            select max(feed_posts.priority)
            from feed_posts
            where feed_posts.feed_id = feed_id
        )
        where feeds.id = feed_id;
    END  

我想创建三个触发器:

      CREATE TRIGGER feed_post_after_test AFTER INSERT (And update and delete ) ON feed_posts
      FOR EACH ROW EXECUTE PROCEDURE change_max_priority();

程序正常工作,但是当我尝试启动触发器时 - 我收到错误:

Error in query (1064): Syntax error near 'PROCEDURE change_max_priority()' at line 2

【问题讨论】:

    标签: mysql sql database triggers database-trigger


    【解决方案1】:

    您有一个双 nn 名称过程:

    替换:

    CREATE PROCEDURE channge_max_priority()
    

    CREATE PROCEDURE change_max_priority()
    

    【讨论】:

      【解决方案2】:

      尝试将更新语句更改为使用连接,这应该可以:

      update feeds 
      set max_post_priority =  max(feed_posts.priority)
      FROM feeds f
      INNER JOIN feed_posts fp on feed_posts.feed_id = f.feed_id
      Group BY f.feed_id
      

      【讨论】:

        【解决方案3】:

        在mysql中,使用CALL执行一个过程:

        CREATE TRIGGER feed_post_after_test AFTER INSERT (And update and delete ) ON feed_posts
              FOR EACH ROW CALL change_max_priority();
        

        我不明白为什么要为每一行执行该过程,整个feeds 表在一次过程调用中更新。

        也不确定最后一个where feeds.id = feed_id;(就在END之前)在过程中是否正确。

        【讨论】:

          猜你喜欢
          • 2012-07-27
          • 2020-11-05
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多