2017-04-25 59 views
0

任何人都可以提出一個好的觸發器,我可以在文本框中使用。我打算在文本框中使用的操作是當用戶更改文本框中的值時,我調用一個Procedure以數據庫表中的值更新該值並提交。但是,當用戶改變數值並按下輸入時,它應該轉到下一個項目,在此之前它更新數據庫。它在KEY-NEXT-ITEM觸發器中正常工作。但是,有一個問題是,用戶改變了fld中的值,但沒有按tab或輸入,而是直接F10提交。我在文本框中的觸發器(即KEY-NEXT-ITEM)不會觸發。我嘗試了一個POST-TEXT-ITEM,但它不讓我使用COMMIT或NEXT_ITEM內置的插件。我想觸發器觸發用戶退出該項目的時刻,也應該到下一個項目的形式post-text-item不能接受提交

回答

1

使用時-VALIDATE-ITEM觸發器。該觸發器基本上用於驗證用戶輸入的值。它激發每當形式決定,該用戶完成字段值的時間 - 當用戶離開現場,當用戶按下提交等

不幸的是你是不是能夠在這個觸發器使用COMMIT_FORM。表單建議僅對事務性觸發器進行直接數據庫更改。爲了實現與承諾,讓你的數據庫程序自治事務運行的數據庫的變化:

CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    UPDATE some_table SET some_column = some_value 
    WHERE table_id = some_id; 
    COMMIT; 
END do_somethning; 

YOUT WHEN-VALIDATE-ITEM觸發器可以是這樣的

BEGIN 
    -- probably do some validations 
    ... 
    -- call your procedure 
    do_something(:some_block.id, :some_block.your_field); 
END; 
+0

這是一個偉大的想法...非常感謝 注意:當我使用「PRAGMA AUTONOMOUS_TRANSACTION;」時它給了我ORA-00060檢測到的死鎖 ,但是當我刪除它時它運行良好。 再次感謝您 –

+0

您可能正在改變與在表單中選擇相同的數據庫記錄。這是期望的行爲嗎? –

+0

是的,這是我想要的 –