Bonjour,
Existe t'il des différences de performances entre ces deux solutions :
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete * from table; commit; execute immediate 'delete * from table';
Bonjour,
Existe t'il des différences de performances entre ces deux solutions :
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.Non, elles ne sont pas identiques puisque dans un cas tu commit dans l'autre non.
C'est pas moi qui dirais le contraireNB : 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à !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.Envoyé par Yorglaa
attention, LUI désigne le DDL et non le PL/SQLEnvoyé par kalyparker
J'avais compris Fred_Dattention, 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
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 sorsNon, le "/" ne fait en lui-même ni COMMIT, ni ROLLBACK il sert uniquement à exécuter un bloc PL/SQL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager