आप एक 'A'
. के साथ varibales को बाँधने की बात कर रहे हैं शुरुआत में और कोई अंडरस्कोर नहीं, जैसे :OLD.AWitnessID
, लेकिन आपका टेबल कॉलम सिर्फ WITNESS_ID
है . इसलिए वे मेल नहीं खाते, और यह त्रुटि उत्पन्न करते हैं। आपके पास WITNESS_TYPE
भी नहीं है कॉलम।
फिर अपने insert
. में स्टेटमेंट आपके पास ऑडिट टेबल में कॉलम के नाम भी गलत हैं। आपने वेरिएबल को Update
. पर भी सेट किया है लेकिन UPDATE
के लिए जांच करें - याद रखें कि तुलना स्ट्रिंग मानों के लिए केस-संवेदी है।
यह आपके स्कीमा के साथ संकलित करता है:
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 कोई संकलन त्रुटि नहीं दिखा रहा है ।