我正在尝试的是在从另一个表插入之前更新一个值 - 这是我得到的:
2 张 table
hbrpg_geo{
...
id INT //id that needs to be written into hbrpg_person
zip VARCHAR(10) //contains postcode
...
}
hbrpg_person{
...
fk_postcode // initially it's filled with UK postcode - but trigger should change value to id of hbrpg_geo of matching postcode (hbrpg_geo.zip).
...
}
触发器:
...
BEGIN
DECLARE NP_VAR integer;
DECLARE OP_VAR TEXT;
SET OP_VAR = NEW.fk_postcode;
SET TE_VAR = OP_VAR;
SELECT hbrpg_geo.id INTO NP_VAR FROM hbrpg_geo WHERE hbrpg_geo.zip = OP_VAR;
SET NEW.fk_postcode = NP_VAR;
END
这一切似乎都在工作:
SET OP_VAR = NEW.fk_postcode;
如果我将 NEW.fk_postcode 替换为引号中的有效英国邮政编码(即:“W1 3XX”),则它可以正常工作,并且触发器会将字段 fk_postcode 替换为 hbrpg_geo 表的 id。
我做错了什么?如何将 NEW.fk_postcode 的值分配给我刚刚声明的变量?
最佳答案
您有作业的顺序:
SET OP_VAR = NEW.fk_postcode;
. . .
SET NEW.fk_postcode = NP_VAR;
列new.fk_postcode
具有相同的类型。但这些列分别是 text
和 integer
。
您需要修复类型不兼容性。我的猜测是,fk_postcode
实际上是一个整数,并且与值(可能是一个字符串)分开。
关于MYSQL 触发器 - 在插入之前从其他表更新表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17538820/