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