将 MySQL 触发器移动到 DB2;关键字 NEW 的问题
Moving MySQL trigger to DB2; issue with keyword NEW
我有这个触发器在 MySQL:
CREATE TRIGGER Recharge_trigger
AFTER INSERT ON Recharges
FOR EACH ROW
UPDATE Balances
SET Balance = Balance + NEW.Amount
Where Uid = NEW.Uid AND Stid = NEW.Stid;
每当我在 Recharges
table 中插入一行时,它会自动更新 Balances
table 中的 balance
列。
然而,当我尝试在 DB2 中 运行 它时,它给出了这个错误:
Server Error: Error for batch element #1: "NEW.AMOUNT" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.66.46
我认为是关键字 NEW
搞砸了。有什么办法可以在 DB2 中编写它吗?
我无权访问任何 DB2 数据库,因此我无法对其进行测试,但查看文档我认为您需要包含一个 REFERENCING
子句。试试这个:
CREATE TRIGGER Recharge_trigger
AFTER INSERT ON Recharges
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
UPDATE Balances SET Balance = Balance + N.Amount Where Uid = N.Uid AND Stid = N.Stid;
END
我有这个触发器在 MySQL:
CREATE TRIGGER Recharge_trigger
AFTER INSERT ON Recharges
FOR EACH ROW
UPDATE Balances
SET Balance = Balance + NEW.Amount
Where Uid = NEW.Uid AND Stid = NEW.Stid;
每当我在 Recharges
table 中插入一行时,它会自动更新 Balances
table 中的 balance
列。
然而,当我尝试在 DB2 中 运行 它时,它给出了这个错误:
Server Error: Error for batch element #1: "NEW.AMOUNT" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.66.46
我认为是关键字 NEW
搞砸了。有什么办法可以在 DB2 中编写它吗?
我无权访问任何 DB2 数据库,因此我无法对其进行测试,但查看文档我认为您需要包含一个 REFERENCING
子句。试试这个:
CREATE TRIGGER Recharge_trigger
AFTER INSERT ON Recharges
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
UPDATE Balances SET Balance = Balance + N.Amount Where Uid = N.Uid AND Stid = N.Stid;
END