2015-12-22 49 views
0

IM嗨設置一些觸發器,我不能讓過去這個錯誤觸發,在1號線ORA 04098

SET SERVEROUTPUT ON 

CREATE OR REPLACE TRIGGER trigger2 
    BEFORE INSERT ON new_donation 
    FOR EACH ROW 
    --WHEN (new.contamt <= 10) 
DECLARE 

v_idno   VARCHAR2(5); 
v_driveno  VARCHAR2(3); 
v_contdate  DATE; 
v_contamt  NUMBER(6,2); 

BEGIN 
SELECT IDNO, DRIVENO, CONTDATE, CONTAMT INTO v_idno, v_driveno, v_contdate, v_contamt 
FROM OLD_DONATION2 
WHERE IDNO = :new.idno; 
IF :new.contamt < 50 THEN 
    RAISE_APPLICATION_ERROR (-20001, 'CONTRIBUTION TOO LOW FOR ' 
     || :new.idno || ' ' || :new.contamt); 
    END IF; 

END; 
/
SET SERVEROUTPUT OFF 

另一部分

DECLARE 
    v_idno  new_donation.idno%TYPE := '&in_idno'; 
    v_driveno  new_donation.driveno%TYPE := '&in_driveno'; 
    v_contdate new_donation.contdate%TYPE := '&in_contdate'; 
    v_contamt  new_donation.contamt%TYPE := &in_contamt; 
BEGIN 
    INSERT INTO new_donation 
    VALUES (v_idno, v_driveno, v_contdate, v_contamt); 

END; 
/

林,當我在觸發2插入值收到此錯誤。

ERROR位於第1行:ORA-04098:觸發器 'XXXXXXXXX.NEW_DONATION' 是 無效,未能再驗證ORA-06512:在第7行

的所有IM試圖做的是插入一些由用戶輸入到這個新表的值,該值爲空。 另外,捐款金額爲< 10我想要一個錯誤。

+0

你可以顯示'new_donation'結構嗎? –

回答

0

請按照下列步驟操作。

運行此查詢select status from all_objects where object_name = 'TBL_USER_TRIGGER' and object_type = 'TRIGGER';

如果狀態是無效的運行alter trigger trigger2 compile;

然後運行show errors

這將引發錯誤你。你需要解決這些問題。