我必须编写代码来克隆具有其他表中关联数据的数据库条目并为其分配一个新 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 的权利,所以这就是为什么我要问而不是尝试这样做。