Oracle EBS之Oracle Forms中的”WHEN-LEAVE-RECORD”觸發器

來源:互聯網
上載者:User
在開發Oracle Forms時,有沒有碰到這樣的需求,我需要在每次離開一行記錄時執行某個操作。用WHEN-VALIDATE-RECORD,不過實際測試的時候,怎麼有時行有時不行?那你有沒有嘗試過WHEN-LEAVE-RECORD呢?什嗎?還有WHEN-LEAVE-RECORD?從來沒有聽說過……

在請出WHEN-LEAVE-RECORD前,讓我們先來分析分析下見過的幾個WHEN觸發器:

WHEN-NEW-RECORD-INSTANCE
滑鼠每次進入新的一行時觸發。

WHEN-CREATE-RECORD
每次插入一行時觸發,沒輸入任何資料時SYSTEM.RECORD_STATUS為NEW,輸入資料後SYSTEM.RECORD_STATUS變為INSERT。

WHEN-VALIDATE-RECORD
當滑鼠離開當前行,且當前行在上一次WHEN-VALIDATE-RECORD到當前離開該行的時刻止,該行資料發生過變換時觸發。

當新插入一行資料,SYSTEM.RECORD_STATUS變為INSERT時,移出會觸發一次。但是,當滑鼠再次進入該行並打算移出,而這段時間內該行並沒有發生改變時,儘管此時該行的SYSTEM.RECORD_STATUS仍為INSERT(未儲存的情況下),但不會再觸發WHEN-VALIDATE-RECORD事件。

同理,當修改了一行資料,SYSTEM.RECORD_STATUS變為CHANGED時,移出該行會觸發一次。但是,當滑鼠再次進入該行並打算移出,而該段時間內該行並沒有發生改變時,儘管此時該行的SYSTEM.RECORD_STATUS仍為CHANGED(未儲存的情況下),將不會再觸發WHEN-VALIDATE-RECORD事件。

好了,時機也差不多成熟了,是時候WHEN-LEAVE-RECORD出馬啦,噹噹噹噹……

我們如何才能在每次移出某行時執行某個操作?從上面的分析我們知道WHEN-VALIDATE-RECORD並不是每次離開行時都會觸發,而似乎又沒有類似WHEN-leave-RECORD之類的觸發器,那碰到這類需求時是不是就沒有其他辦法了呢?
當然不是,我們只需仔細想想WHEN-VALIDATE-RECORD的觸發條件就不難發現,若且唯若該行資料發生了改變WHEN-VALIDATE-RECORD便會觸發。這樣的話,我們通過人為改變行上的資料來引起WHEN-VALIDATE-RECORD。例如,在BLOCK(BLK_DUMMY)上加一個非資料庫的ITEM(就叫ITM_DUMMY吧,為了後面敘述方便,這裡設為數值型,初始值為1),然後在WHEN-NEW-RECORD-INSTANCE(因為WHEN-NEW-RECORD-INSTANCE會在每次進入一行時無條件的觸發)中改變這個ITEM的值(可以這樣做::BLK_DUMMY.ITM_DUMMY
:= NVL(:BLK_DUMMY.ITM_DUMMY, 1) + 1;),到此便大功告成了,WHEN-VALIDATE-RECORD已經被我們改造成了我們自己的WHEN-LEAVE-RECORD觸發器。

怎麼樣,簡單吧?趕緊去開發咱自己的WHEN-LEAVE-RECORD觸發器吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.