IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Boucler plusieurs fois - ne pas entrer dans la boucle SSI la condition est vérifiée


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut Boucler plusieurs fois - ne pas entrer dans la boucle SSI la condition est vérifiée
    Bonjour,
    y a un moyen d'utiliser la boucle IF ou LOOP et reboucler jusqu’à vérification de la condition?
    exemple :
    J'ai un bloc d’instructions :

    instruction 01
    ..traitement dur une table TABLE_A
    instruction 02
    ...
    instruction 03
    ici une autre procédure se lance automatiquement et change une valeur dans la colonne X de la table_A
    ...
    instruction 04
    ici je souhaite vérifier que tous les statuts de la colonne X de la table_A ont été modifiés (=1)
    IF STATUT X = 1 then

    faire ....

    END IF;

    nb : si les statuts n'ont pas tous à 1 je dois revérifier encore une fois jusqu’à vérification de la condition

    Bien à vous.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Il existe CONTINUE ou CONTINUE WHEN depuis la 11g qui permet de passer à l'itération suivante au sein d'une boucle. Je dois dire que son intérêt est assez limité et je l'ai très peu utilisé. Je ne sais pas si cela peut répondre à ton besoin car je ne pense pas avoir tout saisi.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Bonjour,

    Il existe CONTINUE ou CONTINUE WHEN depuis la 11g qui permet de passer à l'itération suivante au sein d'une boucle. Je dois dire que son intérêt est assez limité et je l'ai très peu utilisé. Je ne sais pas si cela peut répondre à ton besoin car je ne pense pas avoir tout saisi.
    merci pour votre réponse, mais je souhaiterai savoir si la CLAUSE : CONTINUE attend la vérification du condition ou elle passe directement au suivant?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Il est possible de préciser une condition avec WHEN : CONTINUE WHEN ...

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    CONTINUE WHEN ...
    d'accord, mais est ce que si la condition n'est pas vérifier jusqu'après quelques instant (de 2 à 3 minutes environ est ce que il attend ou il passe directement?
    salutations

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Non il n'y a pas d'attente. Si tu souhaites "pauser" l'exécution alors tu peux utiliser DBMS_LOCK.sleep(nb_secondes), ou DBMS_SESSION.sleep à partir de la 18c.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Utilisez WHILE.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Utilisez WHILE.
    je pense pas que ça va servir, vu que la clause WHILE sort de la boucle une fois la condition est non vérifiée !
    moi je voudrai attendre un moment le temps que le statut sera = 1 après entrée directement dans la boucle

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    De ce que j'ai compris ici :
    Citation Envoyé par LandGreen Voir le message
    instruction 03
    ici une autre procédure se lance automatiquement et change une valeur dans la colonne X de la table_A
    ...
    instruction 04
    ici je souhaite vérifier que tous les statuts de la colonne X de la table_A ont été modifiés (=1)
    IF STATUT X = 1 then

    faire ....

    END IF;

    Je ferai quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    declare
        v$_flag    simple_integer := 0;
    begin
     
        -- Vos traitements de mise à jour
     
        while v$_flag = 0
        loop
            select case count(*) when sum(statut) then 1 else 0 end
              into v$_flag
              from matable;
            sys.dbms_session.sleep(3);
        end loop;
     
        -- La suite du traitement
    end;
    /

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je pense que vous devez essayer de fournir un jeu de aussi simple que possible. On peux s'imaginer divers solutions mais je trouve que le problème est énoncé d'une manière trop vague.
    Si vous utilisez la solution que Waldar vous a fourni n'oubliez pas de prévoir une sortie du traitement au bout des N cycles d'attente et de réessaie sinon vous risquez d'avoir un traitement sans fin

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2008, 09h27
  2. Plusieurs fois la même donnée dans une liste
    Par BRUNO71 dans le forum IHM
    Réponses: 3
    Dernier message: 21/01/2008, 08h22
  3. Réponses: 3
    Dernier message: 13/10/2007, 16h31
  4. Réponses: 19
    Dernier message: 10/05/2007, 13h50
  5. Plusieurs fois le même .class dans le jar
    Par kenny6 dans le forum Général Java
    Réponses: 7
    Dernier message: 25/04/2007, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo