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 :

Function - déclaration variable locales


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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

  2. #2
    Expert confirmé 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
    Par défaut
    T'as un declare en trop (sinon pas de soucis avec les variables).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Par défaut
    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 : 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
     
    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

  4. #4
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Par défaut
    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.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/08/2013, 17h54
  2. Déclaration des variables locales
    Par Ecrinel dans le forum Général Java
    Réponses: 5
    Dernier message: 12/06/2012, 15h18
  3. Utiliser la valeur d'un spinner lors de la déclaration d'une variable locale
    Par Jiggazzzzz dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 05/12/2011, 09h31
  4. Déclaration et utilisation de variables locales en pile
    Par johan_b dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 04/02/2008, 09h36
  5. SQL2000 - Déclaration Variable Locale
    Par loggti dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/09/2007, 14h56

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