2016-08-19 40 views
1

棘手方案的位。調用另一個觸發器的Oracle觸發器

插入觸發Child_Table之前:

  • 設置Child_Table.Field1的價值就Parent_Table

上Parent_Table 「A」

  • 問題update命令更新之前觸發:

    • 設置:new.Field1 = Child_Table.Field1

    Short question - Will Parent_Table.Field1 =「A」?

    長問題 - Child_Table觸發器是否已完成並將「A」的值提交給Child_Table.Field1,以便它可用於Parent_Table?

  • 回答

    2

    簡短的回答 - 是的。

    較長的答案 - 由觸發器發出的一個update就像任何其他更新一樣,並且會觸發後續的on update觸發器。請注意,除非您明確地使用,否則觸發器中的語句不會提交。但是,由於它在中運行的交易與以下觸發器相同,因此它所做的任何更改都將可用於以下觸發器。

    +0

    謝謝我非常感謝! – Soyf

    +0

    但是,如何在Parent_Table觸發器內獲得「Child_Table.Field1」的值?我只是做了一個測試,雖然我可能錯過了一些東西,但是當父級的觸發器試圖訪問Child中的新行時(這還不存在 - 即BEFORE更新..),我只是得到一個「no data found」.. ) – Ditto

    +1

    哦,等等......這是一隻紅鯡魚。父母不需要BEFORE UPDATE。 O.o BEFORE INSERT觸發器對子進行一切操作... :)我的不好,逐字讀取OP請求,並創建了兩個觸發器。失敗。沒有BEFORE UPDATE觸發器=完美工作。 :) – Ditto