我创建以下表:
create table products
(
code varchar(9),
group_code varchar(9),
price number,
CONSTRAINT pk_code PRIMARY KEY (code)
);
我创建了一个触发器,每组产品的价格不超过100美元:
create or replace trigger nomore100
before insert or update on products
for each row
declare
cursor c_total is
select group_code, sum(price) as total_price
from products
where group_code=:new.group_code
group by group_code;
v_total c_total%rowtype;
begin
for v_total in c_total loop
if v_total.total_price+:new.price > 100 then
raise_application_error(-20150,'No more than 100 dollars');
end if;
end loop;
end nomore100;
/
触发器适用于插入,但当我尝试进行更新时:
update products set price=120 where code='PX1';
Oracle返回:
“表%s.%s正在发生变化,触发器/函数可能看不到它”
感谢您的任何建议或回答,祝您有一个愉快的一天!
1条答案
按热度按时间abithluo1#
您可以在declare部分使用杂注autonomous_transaction来避免表突变错误。
声明pragma autonomous_transaction;--添加此行以启用自主事务
开始//code结束;