日期:2014-05-17  浏览次数:20805 次

我是菜鸟:触发器里面会对原来插入的数据进行修改,如果触发器出错希望不要影响原来的插入事件。
如题,请问下面的写法可不可以:

create   or   replace   trigger   BK_MTL_TRANSACTIONS_001
        before   insert   on   SJH_BBK_001   for   each   row
        pragma       autonomous_transaction;   --将触发器声明为自治事务  
declare
        attr1         varchar2(20);
        attr2           varchar2(20);
        attr3         varchar2(20);
        attr4       varchar2(20);
        len       number;
        CNT       NUMBER;
          begin
 
              --判断外协工单抛出的P/R转成的P/O在接收事务处理中的类型是否为入库
              SELECT   COUNT(*)   INTO   CNT   FROM   RCV_TRANSACTIONS
              WHERE   WIP_ENTITY_ID=   :new.TRANSACTION_SOURCE_ID
              AND   TRANSACTION_TYPE= 'DELIVER ';

              IF(CNT=0)   THEN   RETURN;   END   IF;


                SELECT   NVL(M.ATTRIBUTE3,   ' '),   NVL(M.ATTRIBUTE2,   '9 '),   NVL(M.ATTRIBUTE3,   '0 ')   INTO   ATTR1,ATTR2,ATTR3
                FROM   MTL_TRANSACTION_TYPES   M
                WHERE   TRANSACTION_TYPE_ID   =   :NEW.TRANSACTION_TYPE_ID;--取出编码信息

                LEN:=TO_NUMBER(ATTR2)-LENGTH(ATTR1)-4;--计算出流水号位数
                ATTR3:=TO_CHAR(TO_NUMBER(ATTR3)+1);--当前流水号加一
                ATTR4:=ATTR1||TO_CHAR(SYSDATE, 'YYMM ')||LPAD(ATTR3,LEN, '0 ');   --产生编码
                UPDATE   MTL_TRANSACTION_TYPES   SET   ATTRIBUTE3=ATTR3
                WHERE   TRANSACTION_TYPE_ID=:NEW.TRANSACTION_TYPE_ID;---更新当前流水号
               
                COMMIT;           --       allowed       only       in       autonomous       triggers    


                :NEW.ATTRIBUTE5:=ATTR4;      

        end;

------解决方案--------------------
before insert --> after insert
------解决方案--------------------
after insert
------解决方案--------------------
after insert,然后再update不行吗?