oracle – 如何从一个触发器的过程中修复这个Mutating表
发布时间:2021-03-18 08:14:44 所属栏目:站长百科 来源:网络整理
导读:此触发器将插入的值传递给过程,该过程将这些值插入另一个表中.我收到了一个变异表错误.我怎样才能解决这个问题? CREATE OR REPLACE TRIGGER ADD_INVOICEBEFORE INSERT OR UPDATE OF APP_NO,C_NO ON APPOINTMENTFOR EACH ROWDECLAREBEGINPOP_INVOICE(:NEW.AP
|
此触发器将插入的值传递给过程,该过程将这些值插入另一个表中.我收到了一个变异表错误.我怎样才能解决这个问题? CREATE OR REPLACE TRIGGER ADD_INVOICE BEFORE INSERT OR UPDATE OF APP_NO,C_NO ON APPOINTMENT FOR EACH ROW DECLARE BEGIN POP_INVOICE(:NEW.APP_NO,:NEW.C_NO,:NEW.APP_DATE); END; / CREATE OR REPLACE PROCEDURE POP_INVOICE( I_APP_NO IN INVOICE.APP_NO%TYPE,I_C_NO IN INVOICE.C_NO%TYPE,I_INV_DATE IN INVOICE.INV_DATE%TYPE) AS CURSOR C_POP IS SELECT PRICE FROM TREATMENT T,APPOINTMENT A WHERE T.TRT_NO=A.TRT_NO AND A.APP_NO=I_APP_NO; V_BILL INVOICE.BILL%TYPE; BEGIN OPEN C_POP; FETCH C_POP INTO V_BILL; UPDATE INVOICE SET INV_NO=INV_IDSEQ.NEXTVAL,APP_NO=I_APP_NO,C_NO=I_C_NO,BILL=V_BILL,INV_DATE=I_INV_DATE; END; / 解决方法问题是由触发器本身引用其上带触发器的表引起的.更改过程以接受TRT_NO作为参数,无需在查询中包含APPOINTMENT,因此将避免变异表异常.根据每个处理的记录数量,您甚至可以将光标合并到UPDATE语句中.我认为应该这样做,虽然我无法检查数据库. CREATE OR REPLACE TRIGGER ADD_INVOICE BEFORE INSERT OR UPDATE OF APP_NO,:NEW.APP_DATE,:NEW.TRT_NO); END; / 修订后的程序: CREATE OR REPLACE PROCEDURE POP_INVOICE( I_APP_NO IN INVOICE.APP_NO%TYPE,I_INV_DATE IN INVOICE.INV_DATE%TYPE,I_TRT_NO IN APPOINTMENT.TRT_NO%TYPE ) AS CURSOR C_POP IS SELECT PRICE FROM TREATMENT T WHERE T.TRT_NO = I_TRT_NO; V_BILL INVOICE.BILL%TYPE; BEGIN OPEN C_POP; FETCH C_POP INTO V_BILL; CLOSE C_POP; INSERT INVOICE (inv_no,app_no,c_no,bill,inv_date) VALUES (INV_IDSEQ.NEXTVAL,I_APP_NO,I_C_NO,V_BILL,I_INV_DATE); END; / (编辑:荆门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 企业数字化转型进行时!HR如何通过OpenCertHub 完成蜕变
- 张一鸣回望创业路:7年前,小民宅里诞生了第一版推荐引擎
- 巴基斯坦宣布禁用TikTok:未过滤"不道德内容"
- 投融快讯 | 少年得到获得数千万A轮融资 妙健康完成近5亿元C
- 奔腾空气净化器有什么特点 奔腾空气净化器特点介绍
- 坚果手机元旦大放价 年货节期间Pro 3 到手价格最高优惠500元
- 2020年底iPhone12出货量预计将达到8000万部 因定价实惠
- 希沃与北师大、海淀教师进修学校达成战略合作,启动“在线教
- Steam 201912数据:Valve Index、Rift S持续增长,VR月活占
- 出海、VC再起、岿然不动,监管风暴后ICO利益各方的抉择与矛

