PostgreSQL存储过程中OLD与NEW前缀的用法及代码示例疑问解答
关于PostgreSQL触发器中OLD和NEW变量的用法详解
先给你明确一下:OLD 和 NEW 其实是PostgreSQL触发器函数里的特殊行变量(你提到的“存储过程”其实这里应该是绑定触发器的函数,普通存储过程里是没有这两个变量的哦),它们的含义完全取决于触发的数据库操作类型:
- 当触发的是INSERT操作时:
NEW代表即将插入的全新记录,OLD是不存在的(如果强行调用会报错) - 当触发的是UPDATE操作时:
OLD对应更新前的原记录(包含所有字段的旧值),NEW对应更新后的新记录(包含所有字段的新值,也就是即将替换原记录的那条) - 当触发的是DELETE操作时:
OLD代表即将被删除的原记录,NEW不存在(强行调用同样会报错)
再结合你贴的代码片段来具体解释:
IF (MY_VARIABLE = 'UPDATE' AND (OLD.user_code != NEW.user_code OR NEW.log_time != false)) THEN SELECT name,lastname INTO target_name,target_lastname FROM users.user WHERE user_code = OLD.user_code; ENDIF
这段代码的上下文是UPDATE操作触发的场景:
OLD.user_code就是你理解的那样——这条记录更新前的user_code原有值NEW.user_code是这条记录更新后的user_code新值NEW.log_time则是这条记录更新后的log_time字段值,代码里在判断它是否不等于false
整个逻辑的意思是:当执行UPDATE操作时,如果要么user_code字段被修改了,要么log_time被改成了非false的值,就根据更新前的user_code去users.user表中查询对应的姓名和姓氏,并存入target_name和target_lastname变量中。
内容的提问来源于stack exchange,提问作者sasori
相关产品推荐
相关产品推荐

