簡體   English   中英

在 oracle 中執行觸發器時保持兩個表之間的依賴關系

[英]Maintain dependency between two tables while executing triggers in oracle

我們如何在 oracle 中執行觸發器時保持兩個表之間的依賴關系? 正如我們所知,如果我們有單個表和基於該表的多個觸發器,我們可以使用 follows 子句,但我擔心的是,如果我們有 2 個不同的表並且有基於這些表的不同觸發器,那么我們如何維護一些在這種情況下的正確順序。

例如:--表 1:

CREATE TABLE emp(
empId number PRIMARY KEY,
FirstName varchar2(20),
LastName varchar2(20),
Email varchar2(25),
PhoneNo varchar2(25),
Salary number(8)
);

--表2:

CREATE TABLE emp_1(
empId number PRIMARY KEY,
FirstName varchar2(20),
LastName varchar2(20),
Email varchar2(25),
PhoneNo varchar2(25),
Salary number(8)
);

EMP觸發:

CREATE OR replace TRIGGER TRIGGER_emp 
BEFORE INSERT OR AFTER UPDATE ON emp
FOR EACH ROW 
BEGIN  
  
    dbms_output.put_line ('MY EXECUTE ORDER FOR EMP IS SECOND -EXECUTED');  
END; 
/

EMP1上觸發:

CREATE OR replace TRIGGER TRIGGER_emp1
BEFOR INSERT OR AFTER UPDATE ON emp_1 
FOR EACH ROW 
BEGIN  
  
    dbms_output.put_line ('MY EXECUTE ORDER FOR EMP IS FIRST -EXECUTED');  
END; 
/

現在我希望這個觸發器 TRIGGER_emp1 首先執行,然后這個觸發器最后執行 TRIGGER_emp。 oracle可以嗎

請指導我。

您似乎是最近發布了關於同一主題的兩個問題的用戶的克隆。 有人說你不能那樣做。 觸發器“屬於”單個表,這意味着

  • 您在emp表中插入(或更新)值,然后
  • 觸發觸發器trigger_emp做某事
    • 在你的情況下,它只是顯示一條消息(你可能會,也可能不會看到;這取決於你使用的工具)
  • 由於表emp1沒有發生任何事情,觸發器trigger_emp1不會觸發 - 為什么會這樣?
    • 如果你想讓它觸發,那么讓第一個觸發器( trigger_emp )影響emp1表中的行(插入一行或更新現有值)
      • 一旦你這樣做了, trigger_emp1就會做它所做的一切

也許,只是也許您應該考慮創建一個存儲過程,其中包含與empemp1表中的行一起使用的代碼。 然后,而不是依賴觸發器並擔心它們是否會觸發,它們何時會觸發以及以什么順序觸發,您的主事務實際上會調用該過程,然后執行該工作(並影響empemp1中的行,以您的任何順序想要 - 這很容易做到,因為您只需在過程中重新排列語句)。

暫無
暫無

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

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