gpt4 book ai didi

database - 更新触发器以更新到同一个表

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:16 24 4
gpt4 key购买 nike

create or replace trigger admin.patreg_paid_amt_temp
before UPDATE OF PAIDAMOUNT_TEMP ON admin.patient_registration
REFERENCING OLD AS OLD NEW AS NEW
For EACH ROW
BEGIN
if :new.PAIDAMOUNT_TEMP != :old.PAIDAMOUNT_TEMP
then
UPDATE admin.patient_registration d
set d.PAID_AMOUNT = :new.PAIDAMOUNT_TEMP + d.DIFFERENCE ,
d.PENDING = ABS(:new.PAIDAMOUNT_TEMP - d.DUES)
where d.PATIENT_ID = :new.PATIENT_ID;
end if;
END;

我知道是因为trigger不能改变它读取的表的内容造成的。
谁能帮我完成这个

当我写这个查询时发生以下错误

update admin.patient_registration set paidamount_temp= 1000 where patient_id=11;

执行请求的操作时遇到错误

ORA-04091:表 Admin.PATIENT_REGISTRATION 正在发生变化,触发器/函数可能看不到它
ORA-06512:在“ADMIN.PATREG_PAID_AMT_TEMP”,第 4 行
ORA-04088:执行触发器“ADMIN.PATREG_PAID_AMT_TEMP”时出错
04091. 000000-“表 %s.%s 正在发生变化,触发器/函数可能看不到它”

最佳答案

我们可以在触发器中操作 :NEW 值:

if :new.PAIDAMOUNT_TEMP != :old.PAIDAMOUNT_TEMP
then
:new.PAID_AMOUNT := :new.PAIDAMOUNT_TEMP + :old.DIFFERENCE;
:new.PENDING := ABS(:new.PAIDAMOUNT_TEMP - :new.DUES);
:new.difference := :new.total_charges - :new.per_day_charges;
end if;

现在我们知道每个患者都有一个 PATIENT_REGISTRATION 记录(即 PATIENT_ID 是主键)我们也知道我的解决方案会起作用,并且您不会收到变异表错误。

关于database - 更新触发器以更新到同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com