写了一个触发器如下:
create sequence lt_seq;create or replace trigger TR_ExceedingLimitNotice
before insert or update of ExpAmt
on ExpenseItem
for each row
declare
var_ECLimit number;
var_ecno number;
beginselect ecno 
into var_ecno
from ExpenseItem
where eino=:new.eino;select ECLimit
into var_ECLimit
from ExpCat
where ecno=var_ecno;if :new.expamt>var_ECLimit then
insert into Log_Table
values(lt_seq.nextval,'TR_ExceedingLimitNotice','ExpenseItem',:new.eino,sysdate,'expense limit!');
end if;end;
--测试:
insert into expenseitem(EINO,EXPDESC,EXPENSEDATE,EXPAMT,EXPAPPRAMT,ERNO,ECNO)
values(ei_seq.nextval,'Car Rental','2007-7-10',99,40,1,1);测试的结果老是出现错误
insert into expenseitem(EINO,EXPDESC,EXPENSEDATE,EXPAMT,EXPAPPRAMT,ERNO,ECNO)
            *
第 1 行出现错误:
ORA-01403: 未找到数据
ORA-06512: 在 "ERDB.TR_EXCEEDINGLIMITNOTICE", line 6
ORA-04088: 触发器 'ERDB.TR_EXCEEDINGLIMITNOTICE' 执行过程中出错
那位大侠帮忙看一下是怎么回事,多谢了

解决方案 »

  1.   

    这两句出问题
    select into时 没有数据 抛异常了
      

  2.   


    可是看不出哪个地方出错了啊,
    测试就是在ExpCat表中找ecno=1的那一列,这一列是存在的,怎么会没有数据呢?
      

  3.   

    select ecno  
    into var_ecno           ---这里,假如一条记录也没有,会抛出no_data_found异常
    from ExpenseItem
    where eino=:new.eino;select ECLimit
    into var_ECLimit        ---这里,假如一条记录也没有,会抛出no_data_found异常
    from ExpCat
    where ecno=var_ecno;
      

  4.   


    begin
        select ecno   
        into var_ecno  
        from ExpenseItem
        where eino=:new.eino;
    exception
        when no_data_found then
            null;               ---这里,捕获异常并处理
    end;
      

  5.   

    在触发器后面加上异常处理
    exception
      when no_data_found then
     dbms_output.put_line('no_data_found');
    end;
    你就能看出来了