0

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

我正在寻找使用存储过程,并且想知道是否可能/建议拥有一个调用其他 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

所以我的问题是,是否可以将来自 CopyNewMainRecord 的 newID 的 OUT 与 IN 中的 CopyNewSub1Records 相同,并且我可以在调用插入 SP 时使用来自 CopyNewSub1Records 中的 Get SP 的多行的结果集进行循环吗?

我目前正在等待 DB Admin 授予在我们的 DB2 环境中创建 SP 的权利,所以这就是为什么我要问而不是尝试这样做。

4

2 回答 2

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
于 2009-02-11T03:28:54.400 回答
0

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

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

于 2009-02-11T03:45:15.720 回答