mysql错误,在 ''附近使用正确的语法

标签 mysql triggers

我对这段 SQL 代码有疑问。我想创建一个触发器,就在这里。

CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent`

FOR EACH ROW 
BEGIN     
DECLARE costvalue INTEGER default 0;

IF (OLD.PacketStatusType_Id!=NEW.PacketStatusType_Id) THEN

        IF (OLD.Packet_Cost IS NULL) THEN
            SET costvalue = OLD.Packet_Cost;
        ELSE
            SET costvalue = OLD.Packet_SMSCount;
        END IF;

           IF (costvalue IS NOT NULL) THEN
               CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,costvalue,-1);
           ELSE
               CALL tcksms_packet_update_proc(OLD.Transaction_Id,OLD.PacketStatusType_Id,0,-1);
           END IF;


        DECLARE COST_VALUE_NEW INT DEFAULT 0;

        IF (NEW.Packet_Cost IS NULL) THEN
            SET COST_VALUE_NEW = NEW.Packet_Cost;
        ELSE
            SET COST_VALUE_NEW = NEW.Packet_SMSCount;
        END IF;

           IF (COST_VALUE_NEW IS NOT NULL) THEN
               CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,COST_VALUE_NEW,1);
           ELSE
               CALL tcksms_packet_update_proc(NEW.Transaction_Id,NEW.PacketStatusType_Id,0,1);
           END IF;

        ELSE



        END IF;

   END IF;
END    

但是我明白了;

错误

SQL查询:

CREATE TRIGGER `blog_after_insert` AFTER UPDATE ON `agent` FOR EACH ROW BEGIN DECLARE costvalue INTEGER default 0;

MySQL said: Documentation > #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 '' at line 5

那一行是 我尝试删除空格,组合撇号(' 和 `),手动删除和重写一些行,但无法正常工作,这段代码有什么问题?

最佳答案

create trigger命令前后需要使用delimiter命令,否则触发器体内以分号结束命令会混淆mysql。查看 mysql 的文档 defining stored programs ,其中还有如何使用 delimiter 命令的示例。

关于mysql错误,在 ''附近使用正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35360161/

相关文章:

php - 对 null 调用成员函数prepare() - PDO

mysql - database.yml 中的 pool 选项有什么用

jquery - 放大弹出窗口 "Maxium call stack size exceeded"

java - 如何推迟 PostgreSQL 中表的读取,直到该表的触发器(调用 Java)结束?

mysql - x * POW(10,y) 的奇怪行为。末尾有一个非常小的小数。对于简单整数来说,什么更好?

mysql - 使用 union all 和内连接创建表

Excel VBA : recalculate in UDF sum by highlight color

Mysql触发器——捕获每一列的变化

php - 如何在mysql,php中的单个查询中将任何列值设置为与自动递增id值相同

php - WAMP 中的 SQL Server 而不是 MYSQL