2016-04-01 133 views
0

我經歷了以前的答案,創建了一個僞外鍵來引用Netbeans 8.1中兩個數據庫之間的表。這是我想出了一個代碼,兩個數據庫之間的外鍵

DELIMITER // 

CREATE OR REPLACE TRIGGER conf_track_FK 
AFTER INSERT OR UPDATE on [email protected] 
FOR EACH ROW 
BEGIN 
    IF EXISTS(select * from inserted I where not exists (select * from 
    [email protected] A where I.conf_id=A.conf_id)) 
    RAISE_APPLICATION_ERROR(-20001,'Violation of pseudo-foreign key.'); 
    ROLLBACK; 
    END IF; 
END; 

/

不過,我遇到了以下錯誤:

PLS-00103: Encountered the symbol ";" when expecting one of the following: 
    ) with and or group having intersect minus start union where 
    connect 

PLS-00103: Encountered the symbol "ROLLBACK" when expecting one of the following: 
    := . (% ; 
The symbol ":=" was substituted for "ROLLBACK" to continue. 

PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

    end not pragma final instantiable order overriding static 
    member constructor map 
+1

您的錯誤消息表明Oracle和'@ FIT5148B'是DBLink。您無法通過數據庫鏈接創建觸發器。您需要連接到遠程數據庫並在那裏創建觸發器。另外:對於我所知的任何Oracle SQL工具,''delimiter //'都是無效的。你確定你的工具支持嗎?此外,在Oracle中不存在「插入」這樣的事情 - 特別是不在行級觸發器中。 –

+0

另外'if-statement'結構顯然是錯誤的。請先幫助自己並閱讀一些基本教程。他們不是很難[找](http://stackoverflow.com/tags/plsql/info)。 – user272735

回答

0

創建觸發器dbo.MyTableTrigger ON dbo.MyTable,插入,更新 後作爲 開始

如果不存在(從OtherDB.dbo.TableName中選擇PK,其中PK in(從插入中選擇FK)BEGIN - 在此處理參考錯誤 END

END

+0

嗨,感謝您的快速回復,這是我試圖遵循的基本結構。但是,錯誤處理似乎是導致錯誤的部分。我無法解決這個問題。 –

0

請嘗試下面的插圖代碼段。希望能幫助到你。並且像COMMIT/ROLLBACK這樣的任何TRANSACTIONS都不能被放置在INSED觸發器中,除非它是一個自治事務,但是對於觸發器事務來說,父事務並不是一個好主意。因此,即使父交易失敗,Automnomous交易也會完成。

CREATE OR REPLACE TRIGGER conf_track_FK AFTER 
    INSERT OR 
    UPDATE ON [email protected] --Remove DB link as it cant be used in Trigger 
    FOR EACH ROW 
    DECLARE 
    lv_cnt PLS_INTEGER; 
    BEGIN 
    SELECT COUNT(1) 
    INTO lv_cnt 
    FROM inserted I 
    WHERE NOT EXISTS 
     (SELECT 1 FROM [email protected] A WHERE I.conf_id=A.conf_id 
    ); 
    IF lv_cnt > 0 THEN 
     RAISE_APPLICATION_ERROR(-20001,'Violation of pseudo-foreign key.'); 
    END IF; 
    END; 
/
相關問題