Мне нужно написать код для клонирования записи базы данных со связанными данными в других таблицах и присвоения ей нового идентификатора. Упрощенно У меня есть ОСНОВНАЯ таблица с ключом ID, а подтаблица - SUB1 с FK ID и несколькими записями для каждой записи в MAIN.
Я хочу скопировать данные для определенного идентификатора в MAIN в новые записи, обновив идентификатор до нового значения, чтобы позволить существующей записи оставаться в виде моментального снимка во времени, а новая запись - новой незавершенной работой.
Я хочу использовать хранимые процедуры и задаюсь вопросом, возможно ли / целесообразно ли иметь высокоуровневый 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
Итак, мой вопрос: можно ли использовать OUT newID из CopyNewMainRecord, как в IN, для CopyNewSub1Records, и можно ли использовать набор результатов с несколькими строками из Get SP в CopyNewSub1Records для циклического прохождения при вызове вставки SP?
В настоящее время я ожидаю, что администратор БД предоставит мне права на создание SP в нашей среде DB2, поэтому я спрашиваю, а не пытаюсь это сделать.