簡體   English   中英

如何使用oracle觸發器而不是每行

[英]How to use oracle triggers without for each row

CREATE TRIGGER update
AFTER UPDATE OF pos ON table
IF (COUNT (SELECT * FROM table WHERE pos= 'xyz') = 0)
BEGIN
DELETE FROM table WHERE pos = 'abc';
END;

現在我想檢查更新的表以查看它是否在attributeX中包含值'xyz',如果沒有,則刪除所有具有該列的'abc'的元組。 我不確定如何在ORACLE中解決這個問題。 任何幫助,將不勝感激。 謝謝!

這實際上是將觸發器的使用擴展到其有用的自然區域之外。 您正在將應用程序代碼移動到應用程序開發人員隱藏的位置,並且可能會在代碼中引入死鎖。 我強烈建議您使用觸發器來記錄數據更改,也可以強制執行行更改約束,但其他方面很少。

如果您的應用程序是基於PL / SQL的,那么我將使用API​​子程序來執行更新,並在其中包含代碼。 您可能需要包含DBMS_Lock代碼以序列化刪除。

否則,請考慮將此邏輯包裝在應用程序層中的事務中並從那里運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM