【问题标题】:i have sql error syntax when i make trigger触发时出现 sql 错误语法
【发布时间】:2020-11-05 14:49:48
【问题描述】:

我想创建一个触发器,在 pembayaran 表上创建 id_pembayaran,但是有一个 sql 语法错误

DELIMITER $$
CREATE TRIGGER id_bayar 
    BEFORE INSERT ON pembayaran
    FOR EACH ROW
    BEGIN
    SELECT COUNT(*) FROM pembayaran INTO @idpembayaran;
    SELECT id_jenis_pembayaran, IF(id_jenis_pembayaran = 'DP', 
       SET new.id_pembayaran = CONCAT('DP','-',   DATE_FORMAT(curdate(),'%Y%m%d'),'-',@idpembayaran+1),
       SET new.id_pembayaran = CONCAT('LNS','-', DATE_FORMAT(curdate(),'%Y%m%d'),'-',@idpembayaran+1)
      ) FROM pembayaran;
END$$

DELIMITER ;

【问题讨论】:

  • 错误信息是什么?
  • #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 7 行的“CASE WHEN id_jenis_pembayaran = 'DP' THEN SET new.id_pembayaran =”附近使用正确的语法
  • 在您的代码中看不到任何 CASE 语句。你从哪里得到错误?不管怎样,试试SELECT COUNT(*) INTO @idpembayaran FROM pembayaran;

标签: mysql sql database triggers


【解决方案1】:

我想你打算设置每一行的值:

DELIMITER $$
CREATE TRIGGER id_bayar 
    BEFORE INSERT ON pembayaran
    FOR EACH ROW
BEGIN
    SET new.id_pembayaran =
        (SELECT (CASE WHEN new.id_jenis_pembayaran = 'DP'
                      THEN CONCAT('DP','-',   DATE_FORMAT(curdate(), '%Y%m%d'), '-', COUNT(*) + 1)
                      ELSE CONCAT('LNS','-', DATE_FORMAT(curdate(), '%Y%m%d'), '-', COUNT(*) + 1)
                 END)
         FROM pembayaran
        );
END$$

DELIMITER ;

【讨论】:

  • @Isewa07 。 . . MySQL 对触发器语法可能很挑剔。我更新到应该是正确的版本。
  • 终于也行了,但结果始终是第一个条件
  • @Isewa07 。 . .我期待第二个条件。 when 需要用 new 修改(我改变了)。
猜你喜欢
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多