1. 程式人生 > >簡化動態MERGE的SQL計算

簡化動態MERGE的SQL計算

動態merge 更新 table acl 實現 iss 可用 src sso

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語句。


簡化動態MERGE的SQL計算