2016-04-22 133 views
0

您好我運行使用ORACLE PL/SQL編程創建的觸發器時出現問題。基本上,只要插入的數據庫中不存在位置,我就必須在FEATURES表中插入一個新的元組。這裏的觸發 -ORACLE PL/SQL觸發器編程問題

CREATE OR REPLACE TRIGGER sightTrigger 
    AFTER INSERT 
    ON SIGHTINGS 
    FOR EACH ROW 
DECLARE 
    x INTEGER; 
BEGIN 
    SELECT COUNT(*)INTO x 
    FROM FEATURES 
    WHERE FEATURES.location = :NEW.location; 

    IF(x=0) THEN 
    RAISE APPLICATION ERROR(-20001, 'Warning: Insert into the SIGHTINGS ...'); 

    INSERT INTO FEATUERS(LOCATION,CLASS,LATITUDE<LONGITUDE,MAP,ELEV) 
     VALUES(:NEW.location, 'UNKNOWN', null, null, null, null); 
    END IF; 
END sightTrigger; 

它編譯罰款,但我跑了一個簡單的查詢,以測試它 -

INSERT INTO SIGHTINGS VALUES ('Douglas dustymaiden', 'Person A', 'Piute', TO_DATE('17­Feb­07', 'DD­MON­YY')); 

它給了我所謂的錯誤 - 「ORA-20001:警告:將進目擊...」(我想它) ‘ORA-06512:在第7行’ ‘ORA-04088:觸發器執行’

然後插入到功能表中的錯誤並沒有出現,當我測試它。請幫忙。

回答

0

作爲每文檔上raise_application_error

當被調用時,RAISE_APPLICATION_ERROR結束子程序,並返回一個用戶定義的錯誤數和消息發送到應用。錯誤號和消息可能會像任何Oracle錯誤一樣陷入困境。

所以,先做另一個插入,然後引發錯誤。但是,如果在觸發器中引發未處理的錯誤,則會回滾整個事務,並使用它修改任何數據,觸發器將會出錯。您可能需要考慮以不同的方式向用戶返回消息。

+0

移動插入部分在提出錯誤之後仍然出現錯誤 – tedkim20

+0

是錯誤信息分類還是隻是期望我使用我的思維閱讀技能? – Shadow

+0

同樣的錯誤,ORA-06512:在第9行和ORA-04088:在執行觸發器期間出錯。 – tedkim20