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

Oracle Discussion :

[PL/SQL]Problème GOTO


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2002
    Messages : 66
    Par défaut [PL/SQL]Problème GOTO
    Bonjour,
    juste pour être sûr de moi ... on ne peut pas appeler un label goto si le label est defini avant le goto dans le script ?

    Je travaille sur une Version 9i

    Ci joint un code d'exemple qui plante si vous voulez le rejouer :

    Merci d'avance

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    /*  ========================================================================  */
    /*                                                                            */
    /*               SCRIPT LANCEMENT DES PROCEDURES DE NUIT                      */
    /*                                                                            */
    /*               L'ENSEMBLE DES VARAIABLES SONT A PARAMETRER                  */
    /*               DANS LE PREMIER DECLARE (DECLARE PRINCIPAL                   */
    /*                                                                            */
    /*               LE CHOIX DES BLOCK PL/SQL A LANCER SE FAIT                   */
    /*               EN FONCTION DU JOUR DE LA SEMAINE                            */
    /*  ========================================================================  */
     
     
    /* ===========================================*/
    DECLARE /*         DECLARE PRINCIPAL          */
    /* ===========================================*/
     
    	--on declare les jours de la semaine
    	LUNDI CONSTANT INTEGER  := 1;
    	MARDI CONSTANT INTEGER := 2;
    	MERCREDI CONSTANT INTEGER := 3;
    	JEUDI CONSTANT INTEGER := 4;
    	VENDREDI CONSTANT INTEGER := 5;
    	SAMEDI CONSTANT INTEGER := 6;
    	DIMANCHE CONSTANT INTEGER := 7;
     
    	NUMERO_JOUR INT;
    	NUMERO_SEMAINE INT;
     
     
     
    /* ===========================================*/
    BEGIN   /*          BEGIN  PRINCIPAL          */
    /* ===========================================*/
     
    -- ON RECUPERE LE NUMERO DU JOUR (lundi = 1,mardi = 2,etc...)
    SELECT TO_CHAR(SYSDATE,'D') INTO NUMERO_JOUR FROM dual;
    -- ON RECUPERE LE NUMERO DE LA SEMAINE
    SELECT TO_CHAR(SYSDATE,'IW') INTO NUMERO_SEMAINE FROM dual;
     
    DBMS_OUTPUT.put_line('num jour' || NUMERO_JOUR);
    DBMS_OUTPUT.put_line('num semaine' || NUMERO_SEMAINE);
     
     
     
    -- ON VA LANCER LES DIFFERENTS TRAITEMENTS EN FONCTION DU JOUR
     
    IF NUMERO_JOUR = MERCREDI THEN
     
    	DBMS_OUTPUT.put_line('DEBUT PROC1');
    	GOTO PROC1;
    	<<FIN_PROC1>>
    	DBMS_OUTPUT.put_line('FIN PROC1');	
     
    	DBMS_OUTPUT.put_line('DEBUT PROC2');
    	GOTO PROC2;
    	<<FIN_PROC2>>
    	DBMS_OUTPUT.put_line('FIN PROC2');
     
     
    END IF;
     
     
     
    GOTO FIN_TRAITEMENT;
     
     
    /*  ========================================================================  */
    /*                                                                            */
    /*                           PROCEDURES A LANCER                              */
    /*                                                                            */
    /*  ========================================================================  */
     
     
    <<PROC1>>
    DECLARE
    BEGIN
    	DBMS_OUTPUT.put_line('MERCREDI');
    	DBMS_OUTPUT.put_line('mardi');
    END ;
    GOTO FIN_PROC1;
     
    <<PROC2>>
    DECLARE
    BEGIN 
    	DBMS_OUTPUT.put_line('MERCREDI');
    END;
    GOTO FIN_PROC2;
     
    <<PROC3>>
    DECLARE
    BEGIN 
    	DBMS_OUTPUT.put_line('JEUDI');
    END;
    --GOTO FIN_PROC3;
     
    /*    ON AJOUTE CE SAUT POUR EVITER DE REPASSER DANS TOUTES LES PROCEDURES DECLAREES */
    <<FIN_TRAITEMENT>>
    DBMS_OUTPUT.put_line('FIN_TRAITEMENT');
     
     
     
     
    /* ===========================================*/
    END;    /*           END   PRINCIPAL          */
    /* ===========================================*/

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Mais vous avez tout à fait le droit de définir des fonctions et procédures encapsulées dans votre block PL/SQL. Vous n'avez plus qu'à appeler ces fonctions/procédures et en sortie, continuer le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Declare
      var1  varchar2(10);
      ...
      Procedure p1 is
      Begin
        ...
      End ;
      ...
    Begin
      ...
      p1 ;
      ...
    End ;

  3. #3
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    Il n'est possible de sauter à un labelle avec un goto que lorsque le goto et le labelle se trouvent dans le même bloc PL/SQL.
    .

Discussions similaires

  1. probl execution requete sql
    Par bambino13 dans le forum ASP
    Réponses: 3
    Dernier message: 02/05/2009, 18h30
  2. Erreur %goto et proc sql dans une macro
    Par raf64flo dans le forum Macro
    Réponses: 15
    Dernier message: 17/04/2008, 22h40
  3. VBA SQL proble de requete ajout
    Par darkspoilt dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/05/2007, 16h56
  4. Probl SQL (Xoops -> CBB 3.04) : #1061, #1091
    Par SpeedAirMan dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/07/2006, 17h16

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