2012-12-20 92 views
4

背景

數百數據庫對象(視圖,包,存儲過程等)中的系統的語義等價沒有格式化和無源代碼註釋。我們希望:的重新格式化(PL /)SQL代碼

  1. 自動重新格式化代碼(使用General SQL Parser)。
  2. 自動將標準評論標題複製到每個對象的源文件中。

問題

我們不能把這種翻天覆地的變化到生產而不被測試。

問題

你會如何驗證重新格式化源代碼在功能上等同於未格式化的代碼?

謝謝!

+2

我強烈建議你不要這樣做。我不會相信任何SQL或PL/SQL解析器來執行此操作。自動格式化代碼並不是一項簡單的任務。 –

+1

這有什麼可能的好處?可能有些代碼(甚至可能是很多)永遠不需要顯着的工作,甚至看不到。與已知的收益相比,迴歸的風險肯定會太大。我寧願使用緩慢但肯定的方法:無論何時需要更改對象,對其進行格式化並在*中爲該對象添加標準標題*。然後,當您的更改經過測試時,重新格式化也會同時進行測試。 –

回答

2

簡單:

  1. 運行格式化代碼對一個全新的數據庫
  2. 運行對一個全新的數據庫格式的代碼
  3. 執行完全外銷並重,並比較兩個文件

它們應該是相同的。

它們應該相同的原因是postgres將SQL解析爲其標準的規範形式,所以即使添加不必要的括號也應該導致代碼的內部版本相同。

0

我認爲格式只需要那些需要修改的對象,如果是這樣的話,我建議只格式化您正在處理的對象,最後結果應該投入生產。我使用Oracle SQL Developer,並且對我來說可以安全地處理程序單元並進行格式化。

0

對於你的問題:比較格式化的源代碼與未格式化,你將不得不標記每個他們並比較結果。這實際上打敗了你的原始目標。 ;-)