CREATE OR REPLACE TRIGGER ALARM110_BJQKB
AFTER INSERT ON ALARM110
REFERENCING OLD AS old NEW AS new
FOR EACH ROW
DECLARE
    BJQKB_FSQY  VARCHAR2(30);                                       
    BJQKB_XB    VARCHAR2(3);                                         
BEGIN
    IF INSERTING THEN
       BEGIN
         SJJY_ALARM110(:new.ID,REID);                                 
         BJQKB_CCXB(:new.SEX,BJQKB_XB);                               
         BJQKB_CCDZ(:new.CASEAREA,BJQKB_FSQY);                       
                       
         INSERT INTO [email protected](JJBH,JJSJ,FSQKSJ,FSQY,FSDD,XB,LXDH,CZSJ)
                VALUES(:new.ID,
                       TO_DATE(:new.CASETIME,'YYYY-MM-DD HH24:MI:SS'),
                       TO_DATE(:new.ALARMTIME,'YYYY-MM-DD HH24:MI:SS'),
                       NVL(BJQKB_FSQY,'750000'),
                       :new.CASEADDR,
                       BJQKB_XB,
                       :new.SELEPHONE,
                       SYSDATE);
                   
       EXCEPTION WHEN OTHERS THEN                                    -- 抛出异常
       
         /*-- 传值过程中出现错误将错误信息插入日志表 ----------------------------------------------------------------*/
         INSERT INTO JK_SJCCRZB(SJBH,CZQK,RZRQ,SJBM)
                VALUES(:new.ID,
                       '10',                                         -- '10' 抛出异常数据没有插入临时表
                       SYSDATE,
                       'ALARM110');
       END;
    END IF;
END ALARM110_BJQKB;以上是我写的触发器,当抛出异常时,将错误信息插入日志表,但此时 :new.ID 值为空了,问如何解决,在线等,急!!!

解决方案 »

  1.   

    思路自己最清楚!如果必须保存new.ID,那么为什么会没有呢?记日志,没必要搞主键!
      

  2.   

    只有主键是唯一标识,这也是客户要求的。
    我想问为什么会在抛出异常后取不到。
    就是在 EXCEPTION 下面的INSERT语句
      

  3.   

    应该不会!如果编译通过,那就不应该存在这样的情况!
    或许你的异常就是因为没有:new.ID而产生的!
    你可以用一个其他字段new列来代替看看就知道了!等你调试结果!