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          */
/* ===========================================*/