有两个触发器,都是在插入同一个表之前触发,如此下:
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;
我想知道这两个触发器处罚的先后顺序,为什么?