我是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
答案 0 :(得分:1)
基于您评论中的第二个错误,我猜测是shipment
中有一个外键引用了(order_id, order_status_code)
中的orders
。由于shipment
中有一行用来引用orders
中的一行,因此您无法更改orders
中的列。
在order_status_code
,orders
和shipment
中有invoice
似乎很奇怪。假设这是指orders
中单行的状态,我希望它位于该表中,而没有其他行。
P.S。用户定义的错误代码在ORA-20000
和ORA-20999
之间。第一个错误停留在此范围内。