使用SP克隆数据库记录的最佳方法

时间:2009-02-11 01:53:49

标签: java sql stored-procedures db2

我必须编写代码来克隆其他表中包含关联数据的数据库条目,并为其分配一个新ID。简化我有一个MAIN表,其中包含ID和子表的键,表示带有ID的FK的SUB1和MAIN中每个条目的多个记录。
我想将MAIN中特定ID的数据复制到新记录,将ID更新为新值,以允许现有条目保留为及时快照,新条目将成为正在进行的新工作。

我希望使用存储过程,并且想知道是否有可能/建议使用高级SP来调用其他SP进行工作?

e.g。


    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

所以我的问题是,从IN到CopyNewSub1Records的CopyNewMainRecord中输出newID是否可以,并且我可以在调用插入SP时使用来自CopyNewSub1Records中的Get SP的多行的结果集进行循环?

我目前正在等待被DB管理员授予在我们的DB2环境中创建SP的权利,这就是为什么我要求而不是尝试这个。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我从未使用过DB2,但是它不支持触发器吗?

听起来你想要做的就是建立一个审计表。我以前在SQL Server中完成了这个,并且正确完成,它可能非常有用。您应该能够通过Google搜索“DB2 Audit Trigger”或类似的东西找到一些好的信息。