insert dans Forall et transactions
Bonjour,
je reprends un package PL/SQL et je m'interroge sur le comportement de plusieurs sections.
Je vous en donne un exemple simplifié.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
select F11, F21, F31 bulk collect into var1, var2, var3 from MaTable1
Begin
Forall i in var1.First...var1.Last
insert into MaTable2
(F12, F22, F32)
values (var1(i), var2(i), var3(i));
Exception when others then
Rollback;
End;
Commit; |
Donc ma question est la suivante: combien de transactions sont ouvertes par l'exécution de ce segment de code? Je ne parviens pas à déterminer quel est le comportement d'Oracle lorsque des ordres "LMD" sont appelés dans une boucle.
Chaque ordre Insert ouvre implicitement une nouvelle transaction mais quand est elle fermée (Insert suivant, ordre Commit final)?
Ou alors n'y a t'il qu'une transaction globale ouverte par le begin puis terminée par le rollback ou le commit?
L'idée est de savoir si une telle requête peut faire grossir le tablespace UNDO de manière importante ou non.
Merci d'avance!
Note: la base est sous Oracle 10g