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] Pb proccédure stockée[/PL/SQL]


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut [PL/SQL] Pb proccédure stockée[/PL/SQL]
    Bonjour,

    Voilà j'ai créer une fonction stockée qui prend un paramétre d'entrée et à un parametre de sortie:

    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 Ajout_Navigation( LIBRUBRIQUE IN VARCHAR2,CORUBRIQUE OUT INTEGER )
    return integer
      AS
      BEGIN
          SELECT COREF into CORUBRIQUE
          FROM INAMRE
          WHERE TYREF = 3 and LDESCR LIKE LIBRUBRIQUE;				 
     
    	IF CORUBRIQUE IS NULL 
    	 	 then
    	 		select INAMRE_COREF.nextval into CORUBRIQUE 
    			from dual;	 		  	  
    	end if; 		  
      END;
    /
    mon problème est le suivant, lorsque je tente d'appeler ma procédure sous oracle je n'y parviens pas.
    Voici comment je m'y prend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call Ajout_Navigation('Accueil');
    Quelqu'un vois où ais-je bien pu me tromper dans la façon d'appeler ma fonction?

    Merci d'avance.

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ta fonction a deux paramètres et tu n'en passes qu'un à l'appel.

    Par ailleurs, même s'il est possible de mettre des paramètres out sur une fonction cela n'est pas très propre. En plus cela t'empêche d'utiliser ta fonction dans du SQL pur. Si tu as besoin de 2 valeurs en sortie, il est plus judicieux d'utiliser une procédure avec 2 paramètres out.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    J'ais également fait une procédure mais j'avais le meme soucis.
    Tu dis que je ne passe qu'un parametre mais avant de poster j'ai quand meme essayer plusieurs choses entre autre mais j'ai le meme message d'erreur dans oracle.
    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
    CREATE OR REPLACE PROCEDURE Ajout_Rubrique_Navigation( LIBRUBRIQUE IN VARCHAR2,CORUBRIQUE OUT INTEGER )
      AS
      BEGIN
         --DECLARE rub integer; 
    	 		--rub := (
    				 SELECT COREF into CORUBRIQUE
                 	 FROM INAMRE
        		     WHERE TYREF = 3 and LDESCR LIKE LIBRUBRIQUE;
    				 --)
    	IF CORUBRIQUE IS NULL 
    	 	 then
    	 		select INAMRE_COREF.nextval into CORUBRIQUE 
    			from dual;
     
    	--ELSE 
    	  -- 	  begin 
    	   	--  		RETURN CORUBRIQUE;
    	  	  --end; 
    	end if; 		  
      END;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call Ajout_Rubrique_Navigation('Accueil',libl);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-06576: ceci n'est pas un nom de fonction ou de procédure valide

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Est-ce qu'on peut avoir:
    la version d'Oracle côté serveur ?
    la version d'Oracle côté client ?
    le client Oracle utilisé pour appeler la fonction (SQL*Plus ?)
    le code complet de l'appel de la procédure (avec la déclaration du paramètre en sortie) ?

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    La version d'oracle que j'utilise est celle de TOAD 8.5.3,la procédure que j'ai créer je ne l'apelle pas à partir de sql*plus mais dans toad à partir de sql editor,pour le code d'appel je l'ai déjà mis.
    J'ai pas encore fait appel à ma procedure dans une action java,je veut juste la tester sous oracle avant

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par rafounette
    Tu dis que je ne passe qu'un parametre mais avant de poster j'ai quand meme essayer plusieurs choses entre autre mais j'ai le meme message d'erreur dans oracle.
    Si tu ne nous dis pas tout ce que tu as fait on ne peut pas le deviner

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare
      libl number;
    begin
       Ajout_Rubrique_Navigation('Accueil',libl);
    end;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    J'ai essayer avec sql*plus j'ai la meme chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> call Ajout_Navigation('Accueil');
    call Ajout_Navigation('Accueil')
         *
    ERREUR à la ligne 1 :
    ORA-06576: ceci n'est pas un nom de fonction ou de procédure valide

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Désolée effectivement je me fais mal comprendre.
    Je vais essayer ta proposition

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Ok ben j'ai avancé au niveau de ma fonction stockée

    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
    CREATE OR REPLACE FUNCTION inamre_code_ref (
       librubrique   IN   VARCHAR2,
       POSITION      IN   NUMBER
    )
       RETURN VARCHAR2
    IS
       CURSOR c1
       IS
          SELECT coref
            FROM inamre
           WHERE tyref = 3 AND ldescr = librubrique;
     
       idrub   VARCHAR2(10);
    BEGIN
       idrub := '-1';
     
       OPEN c1;
     
       FETCH c1
        INTO idrub;
     
       CLOSE c1;
     
       IF (idrub = '-1')
       THEN
          SELECT inamre_coref.NEXTVAL
            INTO idrub
            FROM DUAL;
     
          INSERT INTO inamre
                      (tyref, coref, ldescr, cetrir, corfat, colan
                      )
               VALUES (3, idrub, lrubrique, position, '1', 1
                      );
     
       END IF;
     
       RETURN idrub;
    EXCEPTION
       WHEN OTHERS
       THEN
          RETURN '-11';
    END inamre_code_ref;
    /
    Now j'arrive à l'appeler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elect  INAMRE_CODE_REF( 'Profil investor12',8) from dual
    le probleme c'est que y a une erreur au moment de faire l'insert j'ai comme retour -11,alors que j'ai tester l'insertion en dehors de la fonction elle est bonne.
    Quelqu'un vois pourquoi ça coince

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tu ne peux pas faire dans un insert dans une fonction appelée par un select :
    http://www.developpez.net/forums/sho...0&postcount=13
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 17
    Points
    17
    Par défaut
    Effectivement je viens de voir ça, je suis passer par une procédure stockée enfin de compte et c bon merci.

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

Discussions similaires

  1. SQL Server Prcédure Stockée TimeOut
    Par Promesses dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 08h18
  2. [PL/SQL] Appel procédure stockée dans trigger
    Par Félia dans le forum Oracle
    Réponses: 3
    Dernier message: 24/01/2005, 17h25
  3. SQL dans Procédure stockée
    Par julure dans le forum Oracle
    Réponses: 13
    Dernier message: 02/11/2004, 16h57
  4. Pb Procedure Stockée sous SQL SERVEUR et ACCESS
    Par alexcluzel dans le forum MS SQL Server
    Réponses: 24
    Dernier message: 30/07/2004, 16h31
  5. Procédures stockées imbriquées SQL Server
    Par Mike69 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2003, 10h31

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