Oracle在更新之前触发

时间:2019-03-17 11:53:54

标签: oracle plsql database-trigger

我是Oracle sql语法的新手。当order_status_code的{​​{1}}设置为1时,我想更改Orders中的Invoice。但是,当我更改invoice_status_code时,它会显示错误,说invoice_status_code

Cannot update Orders because Shipment exists.

这就是我的更新方式

create or replace TRIGGER change_order_status
before update of invoice_status_code on Invoice
for each row
begin 
   if :new.invoice_status_code = 1 then 
      update Orders 
      set order_status_code = 1
      where order_id = :new.order_id;
    end if;
end;

错误消息:

update invoice 
set invoice_status_code = 1
where invoice_number = 2

ER diagram

1 个答案:

答案 0 :(得分:1)

基于您评论中的第二个错误,我猜测是shipment中有一个外键引用了(order_id, order_status_code)中的orders。由于shipment中有一行用来引用orders中的一行,因此您无法更改orders中的列。

order_status_codeordersshipment中有invoice似乎很奇怪。假设这是指orders中单行的状态,我希望它位于该表中,而没有其他行。

P.S。用户定义的错误代码在ORA-20000ORA-20999之间。第一个错误停留在此范围内。