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

SQL Oracle Discussion :

Équivalent de l'instruction "Continue"


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut Équivalent de l'instruction "Continue"
    Je suis dans une boucle du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for Cur in (select * from HIST_CONTENANT) loop
    ...
    end loop;
    Et à l'intérieur de ma boucle, selon le résultat d'une condition if, je souhaiterais passer à l'itération suivante, sans continuer d'exécuter le reste du code contenu dans cette boucle loop.
    En gros, l'équivalent de l'instruction continue en Delphi ou C++.

    Y a t'il une instruction équivalente en PL/SQL Oracle ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il faut faire un bloc BEGIN/END avec une EXCEPTION.

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    continue existe en oracle
    http://download.oracle.com/docs/cd/B...s.htm#CJAHCFBF

    bon, dans une version plus ancienne, il faut feinter avec des blocs et des exit

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Arf. Pas de chance, je suis en 10g et non en 11g.
    Quand j'essai, il ne connait pas l'instruction.

    Citation Envoyé par laurentschneider Voir le message
    bon, dans une version plus ancienne, il faut feinter avec des blocs et des exit
    Citation Envoyé par orafrance Voir le message
    il faut faire un bloc BEGIN/END avec une EXCEPTION.
    Je ne vois pas comment faire. Tu n'aurrais pas un petit exemple ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    exit;
    ....
    exit when .....;
    ....
    You use the EXIT statement to exit a loop. The EXIT statement has two forms: the unconditional EXIT and the conditional EXIT WHEN. With either form, you can name the loop to be exited.

    Usage Notes
    The EXIT statement can be used only inside a loop. PL/SQL lets you code an infinite loop. For example, the following loop will never terminate normally:

    WHILE TRUE LOOP ... END LOOP;
    In such cases, you must use an EXIT statement to exit the loop.

    If you use an EXIT statement to exit a cursor FOR loop prematurely, the cursor is closed automatically. The cursor is also closed automatically if an exception is raised inside the loop.

  6. #6
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    C'est pas garantie 100% bug free, mais cela devrait ressembler à 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
    18
    19
    20
    21
    22
    declare 
      i integer;
      MyContinue EXCEPTION;
    begin
    for Cur in (select * from HIST_CONTENANT) LOOP
    	BEGIN
    		 IF conditionTrue THEN
    	   	 	RAISE MyContinue;
    		 END IF;
    		 -- Process continues here
    		 -- ...
    		 -- ...
    	EXCEPTION
    		WHEN MyContinue THEN
    			 -- Anything that could be done before processing next iteration
    			 NULL;
    		WHEN OTHERS THEN
    			 RAISE;
    	END;	
    end loop;
     
    end;
    En clair, lorsque tu ne veux pas continuer le traitement, tu fais un RAISE exception qui te permet d'aller directement au niveau du bloc EXCEPTION et ainsi ne pas exécuter le code au milieu sans passer par un IF..ENDIF interminable, ni par un GOTO

  7. #7
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Garuda Voir le message
    You use the EXIT statement to exit a loop.
    Mais, le exit quitte définitivement la boucle, alors que moi je veux juste passer à l'itération suivante.
    Ou alors, j'ai pas compris ...

    Citation Envoyé par Loyd1974 Voir le message
    C'est pas garantie 100% bug free, mais cela devrait ressembler à 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
    18
    19
    20
    21
    22
    declare 
      i integer;
      MyContinue EXCEPTION;
    begin
    for Cur in (select * from HIST_CONTENANT) LOOP
    	BEGIN
    		 IF conditionTrue THEN
    	   	 	RAISE MyContinue;
    		 END IF;
    		 -- Process continues here
    		 -- ...
    		 -- ...
    	EXCEPTION
    		WHEN MyContinue THEN
    			 -- Anything that could be done before processing next iteration
    			 NULL;
    		WHEN OTHERS THEN
    			 RAISE;
    	END;	
    end loop;
     
    end;
    En clair, lorsque tu ne veux pas continuer le traitement, tu fais un RAISE exception qui te permet d'aller directement au niveau du bloc EXCEPTION et ainsi ne pas exécuter le code au milieu sans passer par un IF..ENDIF interminable, ni par un GOTO
    Pas bête le coup du exception.
    Je teste ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  8. #8
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    C'est bon à savoir

+ Répondre à la discussion
Cette discussion est résolue.

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