2011-05-10 90 views
0

我經常需要創建觸發器,它將插入/更新行中的所有內容複製到另一個表。由於有些表格有200列,這往往是一個長文字生成觸發器的SQL腳本

CREATE TRIGGER scheme.trigger AFTER UPDATE ON scheme.table 
    REFERENCING OLD as o_row NEW as n_row 
    FOR EACH ROW 
BEGIN 
    INSERT INTO archive (...) VALUES(...); 
END; 

這是很多打字。是否有一個簡單的生成器來構建這些類型的觸發器,插入和更新?

+4

我有幾年沒有完成DB2了,但是沒有可以引用的數據字典表來獲取列名嗎?寫一個存儲的proc來輸出上面的內容,同時在該輸出中插入列的列表?我已經在Oracle和SQL Server中完成了這個工作,所以我假設你將在DB2中這樣做。 – MJB 2011-05-10 12:20:50

+0

我打算爲此做一個輔助工具,但目前我的時間有點短缺,並想知道是否沒有免費軟件工具可用。 – ZoolWay 2011-05-10 12:38:05

+1

以「select * from systables」開始並從那裏開始。我懷疑推出自己的產品要比搜索確切的工具容易得多。這並不是一個困難的問題。 – MJB 2011-05-10 13:59:53

回答

1

如果進程有一組輸入參數,並且這些參數的進程相同,則可以從觸發器中調用存儲過程,並傳遞參數。 這樣,您不必重新複製/重新創建所有這些DML語句。

+0

這聽起來相當不錯,但參數的數量因各個表而不同。 iSeries DB2存儲過程是否支持可變參數長度(也許你知道)? – ZoolWay 2011-05-13 09:12:12

+0

接受,因爲沒有工具,這是手動處理它的最靈活的方法。 – ZoolWay 2011-05-18 09:44:58

1

我不知道產生CREATE TRIGGER語句爲你的工具,但我已經生成的DDL從查詢了很多次,我曾經需要引用的唯一觀點是SYSCAT.COLUMNS

以下因素將簡化您要編寫的觸發器DDL生成器查詢: - 原始表格和歸檔表格之間的列名稱是相同的。 - 目標表中沒有任何列被定義爲GENERATED ALWAYS,否則您需要從INSERT語句中省略它們。