Bonjour,
Je cherche à écrire une procédure stockée très simple, sauf que je n'y connais pas grand chose en PL/SQL et c'est à moi de me débrouiller ...
J'ai potassé, fait des essais, FETCH, CURSOR, tout ça je m'en sors pas :/
Voici ce que je voudrais :
J'ai une table de log qui liste les erreurs (bloquantes ou non) de l'intégration automatique de commandes.
Dans cette table de log, j'ai une ligne par erreur. Chaque ligne a un statut :
- soit (null)
- soit 'I' comme intégré. Dans ce cas, sauf erreur informatique, la commande ne contient qu'une ligne de log, dans ce cas, la commande elle même est dite intégrée.
- soit 'R' comme rejeté.
--> S'il n'y a qu'une ligne de log et qu'elle est 'R', la commande elle même est dite rejetée.
--> S'il 'y a plusieurs lignes et qu'elles sont toutes 'R', la commande elle même est dite rejetée.
--> S'il 'y a plusieurs lignes et qu'elles sont indifféremment (null) ou 'R', la commande DOIT ETRE considérée comme rejetée, c'est à dire qu'il faut mettre à jour toutes les lignes de log à 'R'
Exemple
Commande Etat
COM01 I
COM02 R
COM03 R
COM03 R
COM04 (null)
COM04 R
--> COM01 = Intégrée
--> COM02 = Rejetée
--> COM03 = Rejetée
--> COM04 = Rejetée et la première ligne doit etre mise à jour.
En gros mon idée :
- Faire un- Boucler sur ces commandes
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT commande FROM MA_TABLE
- Dans la boucle faire un--> Si une seule ligne, on passe à la commande suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT etat FROM MA_TABLE where commande = numero_de_commande récupéré_plus_haut
--> Si plusieurs lignes, on regarde si les valeurs de chaque ligne sont identiques
--> Si elles sont identiques, on passe à la commande suivante
--> Si elles ne sont pas identiques, dès qu'on récupère un 'R', on s'arrete et on fait unQuelqu'un peut-il m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE MA_TABLE set etat='R' where commande = numero_de_commande récupéré_plus_haut
D'avance merci![]()
Partager