本帖最后由 wayout99 于 2014-10-01 16:52:02 编辑

解决方案 »

  1.   

    1、这三行说的是同一个错误,只是一行比一行说的详细
    这三行的内容:
     在触发器的中触发错误,在触发器第四行触发错误,在第四行触发的具体错误
    2、 按下面的方法写试试
    BEGIN     
        delete from  hr.employees  where EMPLOYEE_ID='198' ;
    exception    
        when others then
        if SQLCODE='-20001' then
           DBMS_OUTPUT.PUT_LINE(SQLCODE || '-->'|| SQLERRM );
        end if;
    end;
    感觉三行还是会全都出来,因为这3行是一体的
    SQLERRM的内容应该是这三行
    ORA-20001: 不是上班时间,不能修改departments表
    ORA-06512: 在 "XX.TRG_DEPT_TIME", line 4
    ORA-04088: 執行觸發程式 'XX.TRG_DEPT_TIME' 時發生錯誤
      

  2.   

    您好:
    謝謝,的確還是會出來3行這樣若在前端的程式,會有影響嗎?另外,第2個問題,您是說,先用 WEHN OTHER 來抓全部EXPTION
    再用 if SQLCODE='-20001' then  等 ,一個一個來抓嗎?謝謝!
      

  3.   

    输出的时候可以利用换行符截取SQLERRM,只输出SQLERRM第一行的内容
    试试下面的语句
    DBMS_OUTPUT.PUT_LINE(SQLCODE || '-->'||substr(SQLERRM,1,instr(SQLERRM,chr(10))-1);第2個問題,只能是用 WHEN OTHER 來抓全部EXPTION
    再用 if SQLCODE='-20001' then  等分别处理了
    oracle只接受内部预定义的异常,直接写-20001,oracle是不能识别的