sql - 如何在 Postgresql 中更新后创建触发器
问题描述
我有桌子Room Details
:
和Log Room Status
:
我想创建一个触发器,当room details
我在表中更改status
列时,然后在log room status
表中status
列之前和之后的状态将自动更改。例如,当Room Details
状态为时Vacant Dirty
,我将其更改为Vacant Clean
,则之前状态列中的日志室状态将填充为Vacant Dirty,之后状态将填充为Vacant Clean
这是我的代码:
CREATE OR REPLACE FUNCTION public.log_rs_history()
RETURNS trigger AS
$BODY$DECLARE
BEGIN
IF status = 'UPDATE' THEN
UPDATE log_room_status set status_before=old.status_before, status_after=new.status_after where id_room=id_room and room_number=room_number;
END IF;
RETURN new;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER log_history
AFTER UPDATE
ON public.room_details
FOR EACH ROW
EXECUTE PROCEDURE public.product_hs_history();
解决方案
你很近。我认为您打算这样做:
CREATE OR REPLACE FUNCTION public.log_rs_history()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
IF TG_OP = 'UPDATE' THEN
UPDATE log_room_status
SET status_before=old.status,
status_after=new.status
WHERE id_room=new.id_room
AND room_number=new.room_number;
END IF;
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER log_history
AFTER UPDATE
ON public.room_details
FOR EACH ROW
EXECUTE PROCEDURE public.log_rs_history();
推荐阅读
- php - 是否可以将 akeneo 与我的非 cms PHP 网站集成?
- powerbi - 如何在powerbi中按计数进行分组
- sql - 使用所有不同的值更新多行
- c - Deadlock when using fork, exec and pipes in a parallel environment
- excel - 从excel VBA复制到word时范围有限
- ios - iOS(swift)退出/关闭共享扩展中的预选文本视图
- ios - 将 int 数据从一个视图控制器传递到另一个视图控制器时遇到问题(segue)
- node.js - node.js 中的核心模块是如何工作的?(https://github.com/nodejs/node/blob/master/lib)
- php - laravel mailable 中的未定义变量错误
- c# - Xamarin iOS 控制事件创建重复项