Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 06/02/2007, 12h29   #1
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
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 :
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 :
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.
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 12h44   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 13h28   #3
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
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 :
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 :
call Ajout_Rubrique_Navigation('Accueil',libl);
Code :
ORA-06576: ceci n'est pas un nom de fonction ou de procédure valide
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 13h57   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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) ?
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 14h12   #5
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
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
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 14h28   #6
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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 :
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 14h29   #7
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
J'ai essayer avec sql*plus j'ai la meme chose

Code :
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
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 14h31   #8
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
Désolée effectivement je me fais mal comprendre.
Je vais essayer ta proposition
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 16h10   #9
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
Ok ben j'ai avancé au niveau de ma fonction stockée

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
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 :
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
rafounette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 16h24   #10
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 16h31   #11
Invité régulier
 
Inscription : mars 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 39
Points : 6
Points : 6
Effectivement je viens de voir ça, je suis passer par une procédure stockée enfin de compte et c bon merci.
rafounette 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 20h54.


 
 
 
 
Partenaires

Hébergement Web