簡化動態MERGE的SQL計算

        MSSQL,ORACLE等數據庫支持MERGE語句更新表,但表結構未知時,由於缺乏集合類數據,用存儲過程獲得表結構再動態拼出SQL非常麻煩,代碼會有幾十行之多;同樣原因,用Java等高級語言實現也不簡單。而且使用存儲過程或Java程序需要代碼將內置於數據庫或應用程序中,更新管理較爲麻煩。這時候可用集算器來協助處理,代碼可置於數據庫和應用程序之外,不影響數據庫與應用程序的結構,易於維護。

        參數source和target代表兩個結構相同但數據不同的表,要求以主鍵爲標準用source更新target,比如table1和table2的主鍵都是A和B,數據如下:


   用table2更新table1時,MERGE語句應當如下:

MERGE INTO table1 as t

   USING table2 as s

   ON t.A=s.A and t.B=s.B

   WHEN MATCHED

   THEN UPDATE SET t.C=s.C,t.D=s.D

   WHEN NOT MATCHED

   THEN INSERT VALUES(s.A,s.B,s.C,s.D)
   更新後table1應當如下:

   集算器代碼:


   A1,A2: 從系統表中讀出表source的主鍵存入變量pks,計算結果爲集合[”A”,”B”]。各種數據庫獲得主鍵的方法不同,這裏以MSSQL爲例。

   A3,A4:讀出source的完整字段,columns的計算結果爲[”A”,”B”,”C”,”D”]。

   A5:動態生成MERGE語句。pks.(…)是循環函數,可對集合(包括結果集)的成員依次計算,計算中可用~引用循環變量,用#引用循環計數。

   A6:執行MERGE語句。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章