【问题标题】:MySQL trigger: undefined variable 'tableName'MySQL触发器:未定义的变量'tableName'
【发布时间】:2021-03-13 14:10:49
【问题描述】:

我看不出这个触发器定义有什么问题...我不知道选择查询是错误的还是其他地方。

想法是当在tableA中插入一行时,触发器在tableB上执行SELECT以检索一些数据并insertupdate tableC。

错误:

SQL Error [1327] [42000]: Undeclared variable: aTable

触发 DDL:

DELIMITER //
CREATE TRIGGER my_trigger
AFTER INSERT
ON myTable
FOR EACH ROW
BEGIN
DECLARE varA integer;
DECLARE varB integer;

IF NEW.`Type` = 'comment' THEN
        
    SELECT
        myOtherTable.Id INTO varA
        ,aTable.Id INTO varB
    FROM myOtherTable <----- maybe here
    JOIN aTable ON aTable.id = myOtherTable.aTableId
    WHERE myOtherTable.Id = NEW.Id;

    Insert INTO myThirdTable VALUES 
        (NEW.Id, NEW.time, varA)
    ON DUPLICATE KEY UPDATE ...;
END IF;
END//
DELIMITER ;

2020 年 3 月 12 日更新 似乎添加第二个INTO varB 会导致aTable 变量未声明的错误。

【问题讨论】:

  • 发布的代码不会产生发布的错误。
  • @p.Salmon 更清楚了吗?我试图构建一个与实际用例一样接近的 DDL
  • 这不是选择进入的正确语法,请阅读手册

标签: mysql triggers ddl


【解决方案1】:

测试单语句形式:

CREATE TRIGGER my_trigger
AFTER INSERT
ON myTable
FOR EACH ROW
INSERT INTO myThirdTable (id, `time`, a)
SELECT NEW.Id, NEW.time, myOtherTable.Id
FROM myOtherTable
WHERE myOtherTable.Id = NEW.Id
ON DUPLICATE KEY UPDATE ...;

【讨论】:

  • 你能解释一下为什么这行得通,而不是插入之外的 SELECT 查询吗?
  • @Kaymaz 我不能。正如 P.Salmon 所说(正确!)您的代码无法生成显示的消息。因此,产生显示错误的代码和发布的代码之间会丢失/更改某些内容。
  • @Akine 查看更新。第二个INTO似乎是个问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
相关资源
最近更新 更多