使用从查询中获取的变量在触发器语句中进行比较的问题
Posted
技术标签:
【中文标题】使用从查询中获取的变量在触发器语句中进行比较的问题【英文标题】:Problem with comparison within a trigger statement using a variable gotten from query 【发布时间】:2019-11-09 21:56:23 【问题描述】:我正在尝试在第一个触发器中使用来自第二个表的属性。为此,我尝试将该值加载到变量中,然后将其用作比较。 但是,每当我尝试测试该过程时,比较的答案都是错误的。
DELIMITER $$
create trigger evolve_persona before update on phantom_thieves
for each row begin
set @t := (select tier from persona where pname = old.persona);
if((new.persona != old.persona) and (select cast(@t as unsigned) = '1')) then
set
new.st = old.st+10, new.ma = old.ma+10, new.en= old.en+10, new.ag= old.ag+10,
new.lu= old.lu+20;
end if;
end$$
DELIMITER ;
【问题讨论】:
old.persona
是否为空?比较将失败,因为 null 不等于或不等于任何东西,甚至不等于另一个 null。
不,它是实例化的
【参考方案1】:
我看不出你的触发器有什么问题,但是这有点复杂,因为要写在评论中。
请关注
SET @t = -1;
SELECT @t; -- returns -1
update phantom_thieves SET .....
SELECT @t; -should display at sometime 1
这似乎是层没有响应 1 和上面的唯一问题,你可以看到你得到了什么。
【讨论】:
以上是关于使用从查询中获取的变量在触发器语句中进行比较的问题的主要内容,如果未能解决你的问题,请参考以下文章
在ORACLE触发器中想使用into 语句给一个变量赋值,但是查询出来的值可能为空,如何避免报错未找到任何数据
Oracle SQL If语句使用select进行比较[重复]