Je dois écrire du code pour cloner une entrée de base de données avec des données associées dans d'autres tables et lui attribuer un nouvel ID. Simplifié J'ai une table PRINCIPALE avec une clé d'ID et une sous-table dites SUB1 avec FK d'ID et plusieurs enregistrements pour chaque entrée dans MAIN.
Je souhaite copier les données d'un ID spécifique dans MAIN vers de nouveaux enregistrements en mettant à jour l'ID à une nouvelle valeur pour permettre à l'entrée existante de rester en instantané et la nouvelle entrée en cours de traitement. Je cherche à utiliser des procédures stockées et je me demande s'il est possible/conseillé d'avoir un SP de haut niveau qui invoque d'autres SP pour effectuer le travail?Meilleure approche pour le clonage d'enregistrements de base de données à l'aide de SP
par exemple.
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
Je vois les CopyNewSub1Records comme quelque chose comme
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
Ma question est, est-il normal d'avoir OUT de newID de CopyNewMainRecord comme IN à CopyNewSub1Records et puis-je utiliser le resultset avec plusieurs lignes à partir du Get SP dans CopyNewSub1Records pour effectuer une boucle lors de l'appel du SP d'insertion?
Je suis actuellement en attente d'être autorisé à créer des SP sur notre environnement DB2 par le DB Admin, c'est pourquoi je demande plutôt que de tenter cela.