Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2008, 11h14   #1
Invité de passage
 
Inscription : juin 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 24
Points : 1
Points : 1
Par défaut Function - déclaration variable locales

Bonjour, j'ai un petit soucis de déclaration de mes variables locales. Quelqu'un peut-il m'expliquer comment ça marche?
Merci d'avance

Voici une fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE OR REPLACE FUNCTION get_data (
	   VAR_ID OUT INTEGER,
	   VAR_NAME OUT VARCHAR2
	   )
  RETURN AF_obj_table_Arbo AS
  v_tab AF_obj_table_Arbo := AF_obj_table_Arbo();
BEGIN
	FOR cur_cdl IN (SELECT ID, NAME FROM SOC
		         WHERE SOC_DT_SUP IS NULL AND SOC_REGROUP = 15)
	LOOP
		VAR_ID := cur_cdl.ID;
		VAR_NAME := cur_cdl.NAME;
	END LOOP;
	RETURN v_tab;
END;
Les variables VAR_ID et VAR_NAME sont déclarées comme varialbles OUT
Quand je compile, ça marche

Mais en fait j'aimerai que ces deux varialbles soient locales à la fonction et non en paramètre

J'ai fait ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE OR REPLACE FUNCTION get_data ()
  RETURN AF_obj_table_Arbo AS
  v_tab AF_obj_table_Arbo := AF_obj_table_Arbo();
DECLARE
   VAR_ID INTEGER;
   VAR_NAME VARCHAR2 (100);
 
BEGIN
	FOR cur_cdl IN (SELECT ID, NAME FROM SOC
		         WHERE SOC_DT_SUP IS NULL AND SOC_REGROUP = 15)
	LOOP
		VAR_ID := cur_cdl.ID;
		VAR_NAME := cur_cdl.NAME;
	END LOOP;
	RETURN v_tab;
END;
j'ai une erreur de compilation
jollt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 14h43   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
T'as un declare en trop (sinon pas de soucis avec les variables).
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 16h29   #3
Invité de passage
 
Inscription : juin 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 24
Points : 1
Points : 1
Citation:
Envoyé par mnitu Voir le message
T'as un declare en trop (sinon pas de soucis avec les variables).
J'ai essayé, j'ai toujours un soucis à la compilation (un warning dont je n'arrive pas à avoir le message)

Ma fonction est la suivante :
Code :
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
 
CREATE OR REPLACE FUNCTION AF_get_Arbo (
	   p_owner IN  VARCHAR2 DEFAULT '%',
	   VAR_RSQ_KEY_CDL OUT INTEGER,
	   VAR_RSQ_NOM_CDL OUT VARCHAR2, 
	   VAR_RSQ_KEY_DR OUT INTEGER,
	   VAR_RSQ_NOM_DR OUT VARCHAR2,
	   VAR_RSQ_PAYS_LIB OUT VARCHAR2,
	   VAR_RCTNOM OUT VARCHAR2,
	   VAR_RCTPRN OUT VARCHAR2,
	   VAR_RCTTEL OUT VARCHAR2,
	   VAR_RCTMAI OUT VARCHAR2
	   )
  RETURN AF_obj_table_Arbo AS
 
  v_tab AF_obj_table_Arbo := AF_obj_table_Arbo();
 
BEGIN
	FOR cur_cdl IN (SELECT RSQ_KEY, RSQ_NOM 
			  FROM RSQ 
		         WHERE RSQ_CLI_ID = 13 AND 
		               RSQ_DATE_SUP IS NULL AND 
			       RSQ_RGP1 IN (6,8,9,10,11)
			)
	LOOP
		VAR_RSQ_KEY_CDL := cur_cdl.RSQ_KEY;
		VAR_RSQ_NOM_CDL := cur_cdl.RSQ_NOM;
 
		FOR cur_dr IN (SELECT RSQ_KEY, RSQ_NOM 
		                 FROM RSQ 
				WHERE RSQ_CLI_ID = 13 AND 
				      RSQ_DATE_SUP IS NULL AND 
				      RSQ_MERE = VAR_RSQ_KEY_CDL
			      )
 
		LOOP
			VAR_RSQ_KEY_DR := cur_dr.RSQ_KEY;
			VAR_RSQ_NOM_DR := cur_dr.RSQ_NOM;
			VAR_RCTNOM := 'a'; 
			VAR_RCTPRN := 'b';
			VAR_RCTTEL := 'c';
			VAR_RCTMAI := 'd';
			VAR_RSQ_PAYS_LIB := 'e';
 
			v_tab.extend;
			v_tab(v_tab.last) := AF_obj_row_Arbo(VAR_RSQ_NOM_CDL,
				 VAR_RSQ_KEY_CDL, 
				 VAR_RSQ_NOM_DR,
				 VAR_RSQ_KEY_DR, 
				 VAR_RSQ_PAYS_LIB, 
				 VAR_RCTNOM, 
				 VAR_RCTPRN, 
				 VAR_RCTTEL, 
				 VAR_RCTMAI);
		END LOOP;
  END LOOP;
  RETURN v_tab;
END;
Quoi que je fasse pour supprimer les paramétres, j'ai toujours une erreur à la compile (warning).
Les différents objets appelés existe, je n'ai de soucis qu'avec ces paramêtres
jollt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 16h34   #4
Membre éprouvé
 
Avatar de rvfranck
 
Étudiant
Inscription : novembre 2004
Messages : 739
Détails du profil
Informations personnelles :
Localisation : Canada

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2004
Messages : 739
Points : 494
Points : 494
Moi je ne comprends plus ; c'est un autre problème ou c'est le même?
mnitu ta demandé de supprimer le declare, tu l'as fait? ça a marché ou pas?

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION get_data ()
  RETURN AF_obj_table_Arbo AS
  v_tab AF_obj_table_Arbo := AF_obj_table_Arbo();
   VAR_ID INTEGER;
   VAR_NAME VARCHAR2 (100);
 
BEGIN
   -- ton code
END;
Si c'est un autre problème, tu en crées un autre et tu mets le tag resolu sur celui ci.
__________________
"Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang
rvfranck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 16h54   #5
Invité de passage
 
Inscription : juin 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 24
Points : 1
Points : 1
C'est bien le même problème. J'ai bien supprimé le Declare, et j'ai toujours la même erreur de compilation.
Mais j'ai trouvé un autre moyen de faire en me passant de variables locales, je creuserai leproblème plus tard.

Merci en tout cas.
jollt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web