oracle触发器 乱序,触发器调用的先后顺序问题

有两个触发器,都是在插入同一个表之前触发,如此下:

CREATE OR REPLACE TRIGGER L3SDUSER.pp_product_information_t_bir

BEFORE INSERT

ON pp_product_information_t

FOR EACH ROW

DECLARE

var_weight          NUMBER;

var_length          NUMBER;

var_width           NUMBER;

var_thickness       NUMBER;

var_diameter        NUMBER;

var_num             NUMBER;

var_prod_standard   VARCHAR2 (20);

var_count           NUMBER;

apperror            EXCEPTION;

BEGIN

IF LENGTH (:NEW.warehouse_id) = 4

THEN

:NEW.warehouse_id := :NEW.warehouse_id || :NEW.weaks;

END IF;

SELECT COUNT (*)

INTO var_count

FROM pp_product_information_t

WHERE material_id = :NEW.material_id

AND batch_id = :NEW.batch_id

AND warehouse_id = :NEW.warehouse_id

AND waste_flag = :NEW.waste_flag

AND inspection_flag = :NEW.inspection_flag

AND product_order_no = :NEW.product_order_no

AND out_flag = '0';

IF var_count > 0 AND :NEW.out_flag = '0'

THEN

SELECT NVL (weight, 0), NVL (LENGTH, 0), NVL (width, 0),

NVL (thickness, 0), NVL (diameter, 0), NVL (num, 0),

prod_standard

INTO var_weight, var_length, var_width,

var_thickness, var_diameter, var_num,

var_prod_standard

FROM pp_product_information_t

WHERE material_id = :NEW.material_id

AND batch_id = :NEW.batch_id

AND warehouse_id = :NEW.warehouse_id

AND waste_flag = :NEW.waste_flag

AND inspection_flag = :NEW.inspection_flag

AND product_order_no = :NEW.product_order_no

AND out_flag = '0';

DELETE FROM pp_product_information_t

WHERE material_id = :NEW.material_id

AND batch_id = :NEW.batch_id

AND warehouse_id = :NEW.warehouse_id

AND waste_flag = :NEW.waste_flag

AND inspection_flag = :NEW.inspection_flag

AND product_order_no = :NEW.product_order_no

AND out_flag = '0';

:NEW.weight := :NEW.weight + var_weight;

:NEW.num := :NEW.num + var_num;

ELSIF var_count = 0

THEN

-- MODIFIED BY ZLS! 2006.8.24

IF SUBSTR (:NEW.warehouse_id, 5, 4) = '2310'

THEN

:NEW.prod_standard := :NEW.diameter || '*' || :NEW.length;

ELSE

IF :NEW.warehouse_id = '64002410' and :new.product_order_no = '000000000000'

then

:new.prod_standard := :new.width || '*' || :new.thickness || '*' || :new.length;

else

:NEW.prod_standard := :NEW.width || '*' || :NEW.thickness || '*'|| :NEW.LENGTH;

END IF;

end if;

END IF;

EXCEPTION

WHEN OTHERS

THEN

BEGIN

proc_alarm_inform ('E',

'TRI_BEF_INS_PRODUCT_INF',

SQLCODE,

'TRIGGER TRI_BEF_INS_PRODUCT_INF ERROR!',

SQLERRM

);

RAISE apperror;

END;

END;

CREATE OR REPLACE TRIGGER L3SDUSER.pp_product_information_t_br

BEFORE UPDATE OR DELETE OR INSERT

ON PP_PRODUCT_INFORMATION_T

REFERENCING NEW AS NEW OLD AS OLD

FOR EACH ROW

BEGIN

IF INSERTING

THEN

INSERT INTO pp_oper_record

(warehouse_id, oper_type, update_date, product_order_no,

batch_id, material_id, steel_grade,

weight, num, out_flag,

inspection_flag, shift_no, plate_pile, ma_code,

produce_date, table_name

)

VALUES (:NEW.warehouse_id, 'I', SYSDATE, :NEW.product_order_no,

:NEW.batch_id, :NEW.material_id, :NEW.steel_grade,

:NEW.weight, :NEW.num, :NEW.out_flag,

:NEW.inspection_flag, '', '', '',

:NEW.produce_date, 'P'

);

ELSIF UPDATING

THEN

INSERT INTO pp_oper_record

(warehouse_id, oper_type, update_date, product_order_no,

batch_id, material_id, steel_grade,

weight, num, out_flag,

inspection_flag, shift_no, plate_pile, ma_code,

produce_date, table_name

)

VALUES (:OLD.warehouse_id, 'U', SYSDATE, :OLD.product_order_no,

:OLD.batch_id, :OLD.material_id, :OLD.steel_grade,

:OLD.weight, :OLD.num, :OLD.out_flag,

:OLD.inspection_flag, '', '', '',

:OLD.produce_date, 'P'

);

INSERT INTO pp_oper_record

(warehouse_id, oper_type, update_date, product_order_no,

batch_id, material_id, steel_grade,

weight, num, out_flag,

inspection_flag, shift_no, plate_pile, ma_code,

produce_date, table_name

)

VALUES (:NEW.warehouse_id, 'u', SYSDATE, :NEW.product_order_no,

:NEW.batch_id, :NEW.material_id, :NEW.steel_grade,

:NEW.weight, :NEW.num, :NEW.out_flag,

:NEW.inspection_flag, '', '', '',

:NEW.produce_date, 'P'

);

ELSIF DELETING

THEN

INSERT INTO pp_oper_record

(warehouse_id, oper_type, update_date, product_order_no,

batch_id, material_id, steel_grade,

weight, num, out_flag,

inspection_flag, shift_no, plate_pile, ma_code,

produce_date, table_name

)

VALUES (:OLD.warehouse_id, 'D', SYSDATE, :OLD.product_order_no,

:OLD.batch_id, :OLD.material_id, :OLD.steel_grade,

:OLD.weight, :OLD.num, :OLD.out_flag,

:OLD.inspection_flag, '', '', '',

:OLD.produce_date, 'P'

);

END IF;

END pp_product_information_t_bur;

我想知道这两个触发器处罚的先后顺序,为什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值