Pb sous PL/SQL : correspondance de Transaction ? - SQL/NoSQL - Programmation
Marsh Posté le 04-06-2004 à 08:55:37
sous Oracle, les transactions sont là de base.
Si tu fais plusieurs requêtes et que tu veux à un point précis que la transaction se fasse, il suffit de faire 'COMMIT'
et si tu veux annuler tout ce qui a été fait depuis le dernier point de COMMIT, c'est 'ROLLBACK'.
Donc en gros, c'est pareil, sauf que le 'BEGIN TRANSACTION' est inutile sous Oracle.
Marsh Posté le 04-06-2004 à 08:57:08
et voilà ce que ça donnerait en PL/SQL :
Code :
|
Le BEGIN / END sont nécessaires pour commencer et arrêter une procédure.
Marsh Posté le 04-06-2004 à 10:05:32
non mais on s'est pas compris je pense ... Il faut que si la suppression marche sur les 2 premieres requetes et pas la 3ème il me rétablisse les 2 précédentes. Il faut que le commit se fasse seulement si toutes les requetes de suppression (ici 4) on effacé une ligne dans la table ! Le rollback doit s'enclencher en cas d'impossiblité d'une suppression.
Donc ta solution ne m'avance pas ou sinon je t'ai pas compris ...
Marsh Posté le 04-06-2004 à 11:21:45
je comprenais pas trop ce que tu appelais 'impossibilité d'une suppression'.
Si tu fais un DELETE abec IDGrp qui n'apparaît pas à la table, il n'y a pas d'erreur, le DELETE n'efface rien. Donc il faut récupérer le nombre de lignes touchées par le DELETE, et si ce nombre est 0 après une des 4 requêtes effectuées, on fait un ROLLBACK.
Marsh Posté le 04-06-2004 à 11:26:41
C'est SQL%ROWCOUNT qui donne le nombre de lignes affectées par une requête.
Donc ton code peut s'écrire :
Code :
|
Marsh Posté le 04-06-2004 à 11:31:11
oui c'est ca. Si le nombre de ligne touchée par le delete est différent du nombre total de delete dasn la procédure on fait un rollback. Mais comment récupérer ce nombre de ligne ou plutot comment faire pour tester si l'opération delete à touché une ligne ? Si je trouve ca il suffit de mettre une variable que j'incrémente à chaque suppression et je fais un test avant chaque suppression pour savoir si la précédente à marchée.
Marsh Posté le 04-06-2004 à 11:56:21
Il n'accepte pas le "exit" il me dit :
" PLS-00376: instruction EXIT non autorisée ; elle doit apparaître dans une boucle"
Marsh Posté le 04-06-2004 à 12:11:05
Essaye ça :
Code :
|
Marsh Posté le 04-06-2004 à 12:26:08
ok ca compile sans probleme. Mais est ce que si les 2 première suppressions marchent, pas la troisième et la 4ème marche : le rollback va se faire à quel moment ? Ne va t-il pas se faire avant la 4ème suppression ?
Marsh Posté le 04-06-2004 à 12:36:55
il me semble que ça marche comme les exceptions dans tout langage : si aucune ligne n'est effacée au 3ème DELETE, alors l'exception PAS_DE_LIGNE_EFFACEE est levée, et attrapée par 'EXCEPTION WHEN ...'.
Donc le ROLLBACK doit se faire
Marsh Posté le 03-06-2004 à 17:46:49
Voila je dois migrer des procedures SQL Server en Oracle et je ne vois quelle est la correspondance au mot clef "TRANSACTION" ?
En fait ca sert à executer plusieurs suppressions ou plusieur insertions en même temps et si une est impossible il efface les précédentes.
ex en SQL Server :
@IDGrp etant un parametre en entrée.
Si quelqu'un connait la correspondance en PL/SQL merci de me la poster.