Bonjour,
Existe t'il des différences de performances entre ces deux solutions :
Merci. :)Code:
1
2 delete * from table; commit; execute immediate 'delete * from table';
Version imprimable
Bonjour,
Existe t'il des différences de performances entre ces deux solutions :
Merci. :)Code:
1
2 delete * from table; commit; execute immediate 'delete * from table';
Bonjour,
A priori il n'y a aucune différence. execute immediate permet simplement d'exécuter une commande DDL ou DML dans un bloc pl/sql.
Donc je dirais que les 2 sont identiques au niveau perf.
voili, voilou
Non, elles ne sont pas identiques puisque dans un cas tu commit dans l'autre non.
NB : si tu delete toute ta table pourquoi ne pas faire un truncate table ?
Sauf erreur de ma part, la commande execute immediate fait un commit implicite.Citation:
Non, elles ne sont pas identiques puisque dans un cas tu commit dans l'autre non.
C'est pas moi qui dirais le contraire ;)Citation:
NB : si tu delete toute ta table pourquoi ne pas faire un truncate table ?
non, je ne crois pas que le execute immédiate fasse un commit implicite...
le fait est que le execute immediate est souvent employé dans du PL/SQL pour faire du DDL qui, LUI, fait du commit implicite !
sinon, pour le truncate ce n'est pas toujours possible en fonction des contraintes sur la table.
de plus le truncate est dangereux puisqu'il ne peux pas s'annuler avec un rollback... donc oublie le truncate dans une PL/SQL où tu souhaite gèrer l'intégralité d'une transaction.
Et enfin, pire que tout, le truncate est une opération DDL, et donc va COMMITER les opérations précédentes, que tu le veuille ou non !!!!
Merci pour cette précision, j'ai appris un truc là ! :mouarf:Citation:
le fait est que le execute immediate est souvent employé dans du PL/SQL pour faire du DDL qui, LUI, fait du commit implicite !
De manière générale je suis d'accord avec toi, mais comme on ne sait pas pourquoi ni comment pegase06 utilise son delete, le truncate peut-être une solution intéressante, d'autant plus qu'il fait un commit juste après son delete. C'est pourquoi je posais la question.Citation:
Envoyé par Yorglaa
attention, LUI désigne le DDL et non le PL/SQL ;)Citation:
Envoyé par kalyparker
J'avais compris Fred_D :aie:Citation:
attention, LUI désigne le DDL et non le PL/SQL
Pour faire un commit d'un bloc pl/sql il faut utiliser /
Mais là, je crois que l'on s'éloigne un peu du sujet de départ...
je préfère préciser pour nos lecteurs qui aurait pu se méprendre ;)
Citation:
Pour faire un commit d'un bloc pl/sql il faut utiliser /
Non, le "/" ne fait en lui-même ni COMMIT, ni ROLLBACK il sert uniquement à exécuter un bloc PL/SQL ou a réexécuter la dernière commande:
http://download-uk.oracle.com/docs/c...4.htm#i2696794
Ok, je sors :triste:Citation:
Non, le "/" ne fait en lui-même ni COMMIT, ni ROLLBACK il sert uniquement à exécuter un bloc PL/SQL