Bạn đang đề cập đến các biến thể ràng buộc bằng 'A'
ở đầu và không có gạch dưới, như :OLD.AWitnessID
, nhưng cột trong bảng của bạn chỉ là WITNESS_ID
. Vì vậy, chúng không khớp và tạo ra lỗi này. Bạn thậm chí không có WITNESS_TYPE
cột.
Sau đó, trong insert
của bạn báo cáo bạn cũng có tên cột trong bảng kiểm tra sai. Bạn cũng đặt biến thành Update
nhưng hãy kiểm tra UPDATE
- phần so sánh phân biệt chữ hoa chữ thường đối với các giá trị chuỗi.
Điều này biên dịch với giản đồ của bạn:
CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
FOR EACH ROW
DECLARE
v_trigger_task varchar2(10);
BEGIN
IF UPDATING THEN
v_trigger_task := 'UPDATE';
ELSIF DELETING THEN
v_trigger_task := 'DELETE';
ELSIF INSERTING THEN
v_trigger_task := 'INSERT';
ELSE
v_trigger_task := NULL;
END IF;
IF v_trigger_task IN ('DELETE','UPDATE') THEN
INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
AUDIT_DATE, AUDIT_ACTION)
VALUES (:OLD.Witness_ID, :OLD.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
SYSDATE, v_trigger_task);
ELSE
INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
AUDIT_DATE, AUDIT_ACTION)
VALUES (:NEW.Witness_ID, :NEW.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
SYSDATE, v_trigger_task);
END IF;
END TRG_PLAUDWIT;
/
SQL Fiddle không có lỗi biên dịch .