2009-02-11 65 views
0

我必須編寫代碼來克隆其他表中的關聯數據的數據庫條目,併爲其分配一個新的ID。簡化我有一個主鍵與ID和子表稱SUB1與FK的ID和主記錄每個條目的多個記錄。
我想將MAIN中特定ID的數據複製到新記錄中,將ID更新爲新值以允許現有條目保留爲時間快照,並且新條目成爲正在進行的新工作。使用SP克隆數據庫記錄的最佳方法

我正在尋找使用存儲過程,我想知道是否有可能/建議有一個高層SP調用其他SP來執行這項工作?

例如


    CREATE PROCEDURE CopyNewVersion (IN oldID) 
    ... 
    BEGIN 
    --copy main record details for passed in oldID, 
    --return the new ID thats been allocated 
     CALL CopyNewMainRecord(IN oldID, OUT newID) 
    --copy all SUB1 records for oldID to newID 
     CALL CopyNewSub1Records(IN oldID, IN newID) 
    --Declare a cursor to return the details in MAIN for newID 
    END 

我看到了CopyNewSub1Records就像這樣


    CREATE PROCEDURE CopyNewSub1Records (IN oldID, IN NewID) 
    ... 
    BEGIN 
     --select all records in SUB1 with FK oldID 
     --sp opens a cursor for return 
     CALL GetSUB1Records(oldID) 
     for each returned record in the cursor resultset 
     --insert into SUB1 values(newID, other data for this row,....) 
     CALL CreateSUB1Record(row details) 
    END 

所以我的問題是,是否可以擁有NEWID從CopyNewMainRecord的OUT如在對CopyNewSub1Records,我可以使用的結果集在調用插入SP時,CopyNewSub1Records中的Get SP有多行循環訪問?

我目前正在等待數據庫管理員被授予在我們的DB2環境中創建SP的權利,因此我爲此要求而不是嘗試這樣做。

回答

1

我對DB2並不太熟悉,但我認爲直接插入比使用跨範圍的光標工作要好得多。

將複製主存儲過程的輸出參數作爲其他存儲過程的輸入,對我來說非常合適。

作爲我將如何創建CopyNewSub1Records的一個例子,我會做這樣的事情: (請原諒任何語法問題......就像我說過的,我不使用DB2--您如何知道來自列?)

CREATE PROCEDURE CopyNewSub1Records (IN oldID, IN NewID) 
BEGIN 
    INSERT INTO Sub1 
    (
      ID, 
      SubID, 
      Col1, 
      Col2 
    ) 
    SELECT 
      NewID, 
      SubID, 
      Col1, 
      Col2 
    FROM 
      Sub1 
    WHERE 
      ID = oldID 
END 
0

我從來沒有用過DB2,但是它不支持觸發器嗎?

聽起來像你正在做的是建立一個審計表。我之前在SQL Server中完成了這項工作,並且正確地完成了它,它可能非常有用。您應該可以通過Google搜索「DB2審覈觸發器」或類似的東西找到一些好的信息。

相關問題