2013-10-18 45 views
0

依靠oracle ROLLBACK命令導入數據,驗證數據和執行ROLLBACK的良好實踐?Oracle-依靠ROLLBACK進行數據驗證

我已經爲我們的ERP構建了一個數據導入程序,並查看了代碼,它們將數據插入到實際表中,進行驗證,如果驗證失敗,則執行ROLLBACK。我一直在插入前驗證數據,但只是好奇,如果這是一個可以接受的方法依靠?

+0

事情是 - 它**不能保證下一個(真正的)調用數據不會違反一些約束。 – zerkms

回答

0

有幾件事情要記住這裏 -

  • 約束使我們保持數據的完整性。這意味着約束條件允許我們在數據庫級本身執行業務規則(或至少是那些最基本的規則)。

  • A commitrollback是一種保留或取消交易中所做更改的方法。如果在一系列成功運行的DML語句後發出commit,則更改將被保留。 rollback聲明將撤消更改。

  • 如果在一系列DML語句中,如果其中一個失敗,那麼該特定語句的效果會回滾。例如,如果一個UPDATE語句更新了10行並且其中一個違反了重要的約束,則10行中的任何一行都不會被更新。然而,其前面的陳述的影響並未隱含地回滾。

  • 爲了保持數據完整性並根據業務需求保留數據,如果任何DML失敗,您必須發出手冊ROLLBACK語句。

  • 你在程序中看到的是同樣的做法。在成功的事務之後它不會發出ROLLBACK,但只有在失敗的DML之後,如果仔細查看代碼,纔會發出ROLLBACK。這確實是一個很好的練習,可以回滾失敗,並且只有在一切正常時才進行提交。

  • 數據前端檢查確實是任何應用程序的重要組成部分。這可確保輸入的數據符合業務角色。即使在這種情況下,必須應用約束才能在數據庫級執行檢查。當一些菜鳥對前端進行更改並嘗試輸入無效數據時,這特別有用。當有人繞過應用程序並手動輸入數據時,這也很有用。因此,對數據庫級別施加約束始終是必要的。