2012-07-04 43 views
0

获取ORA-04079:此触发器的无效触发器规范错误,可以找出原因吗?表 - TESTCOMM_FINDCOMM - 2号,价格和通讯SQL触发器 - 无法调用函数

create or replace trigger TESTCOMM_FINDCOMM 
AFTER 
insert or update on "TESTCOMM" 
for each row 
referencing new as new and old as old 
begin 
    :NEW.Commission:= :NEW.Price*get_Comm(:NEW.Price);  
end; 

功能get_Comm

create or replace function get_Comm 
(i_price in NUMBER) 
return NUMBER 
as 
o_COMMISSION_percent PRICECOMMISSION.COMMISSION%type; 
begin 
    select COMMISSION 
into o_COMMISSION_percent 
    from (
     select COMMISSION, 
      rank() over (order by Price desc) rnk 
     from PRICECOMMISSION 
     where PRICE <= i_price 
) where rnk = 1;  

    return o_COMMISSION_percent; 

end;​ 
+0

这看起来像甲骨文,是吗? SQL是一种由多个RDBMS实现的语言,你使用哪一种? – Ben

回答

3

你的触发器是一个后插入/更新触发器 - 你不能修改:新值插入/更新后。

有关AFTER触发器的更多信息,请参阅here。你应该看到的是一个BEFORE触发器。