【问题标题】:Statement in trigger is not "picking up" the condition in its Where clause触发器中的语句没有“拾取”其 Where 子句中的条件
【发布时间】:2018-05-06 20:14:51
【问题描述】:

所以我目前正在研究 MySQL 触发器。我试图在插入新记录时为两个变量赋值。以下是查询:

  1. SET mssgDocNo = (SELECT Document_ID FROM CORE_MSSG WHERE Message_ID = new.MSSG_ID);

  2. SET mssgRegime = (SELECT CONCAT (Regime_Type, Regime_Code) FROM T_DOC WHERE CD_Message_ID = new.MSSG_ID);;

由于某种原因,第二个 SQL 查询没有选择“new.MSSG_ID”条件,而同一触发器中的第一个查询可以识别它。我真的无法弄清楚似乎是什么问题。

当我在第二个查询中用数据库中的硬编码值替换“new.MSSG_ID”时,它似乎可以工作。我怀疑“new.MSSG_ID”是问题所在,因为它在第一个查询中运行良好。

我已经尝试了几乎所有我能想到的东西。非常感谢您的帮助。

【问题讨论】:

  • 考虑发布相关表的 DDL 和整个触发器代码,可能还有一些测试数据。

标签: mysql sql database select triggers


【解决方案1】:

我会把这些更简单地写成:

SELECT mssgDocNo := Document_ID
FROM CORE_MSSG
WHERE Message_ID = new.MSSG_ID;

SELECT mssgRegime := CONCAT(Regime_Type, Regime_Code)
FROM T_DOC
WHERE CD_Message_ID = new.MSSG_ID;

SET 不是必需的。

我确实做了另一项更改,可能会使其工作。我删除了CONCAT 之后的空格。某些版本的 MySQL 在函数调用后无法解析空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多