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 31/05/2006, 09h39   #1
Débutant
 
Inscription : avril 2005
Messages : 464
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 464
Points : 69
Points : 69
Par défaut PL/SQL : Modification de paramétres

Bonjour,

Dans une fonction PL/SQL, j'ai un paramétre de type number.Et dans le cops de la fonction, je veux modifier le paramétre(un select INTO dans ce paramétre) et il me signe l'erreur suivante :

Error: PLS-00403: l'expression 'D_UNITCOST' ne peut être utilisée comme cible INTO d'une instruction SELECT/FETCH[/COLOR]

code :
create or replace function sg_overcost_keep( pal_projectname varchar2,d_unitcost number)
begin
select decode(d_unitcost,null,0.0,d_unitcost) into d_unitcost from dual;
end;


J'ai mis d_unitcost comme out Number mais là au moment de l'appel, il me dit impossible d'appeler une fonction avec un paramétre out.

Merci de me donner un coup de main

madina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 10h10   #2
Membre actif
 
Inscription : mai 2004
Messages : 283
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 283
Points : 154
Points : 154
Envoyer un message via MSN à cosmos38240
Salut,

Code :
1
2
3
4
5
 
CREATE OR REPLACE FUNCTION sg_overcost_keep( pal_projectname IN varchar2,d_unitcost IN out number)
begin
SELECT decode(d_unitcost,NULL,0.0,d_unitcost) INTO d_unitcost FROM dual;
end;


++
cosmos38240 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 10h32   #3
Débutant
 
Inscription : avril 2005
Messages : 464
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 464
Points : 69
Points : 69
Par défaut PL/SQL: retourner une lise de colonnes

Oui, j'ai effectivemment mis le code(mettre les paramétres IN, et IN OUT).
Mais dans une autre fonction où j'appelle cette fonction qui contient ces paramétres en IN et IN OUT, il me signale l'erreur :

Error: PL/SQL: ORA-06572: Fonction SG_OVERCOST_KEEP sans arguments
madina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 10h49   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 448
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 448
Points : 4 194
Points : 4 194
Une Fonction est un code qui renvoie une valeur par un return.
Dans ton cas, c'est une procédure qu'il faut déclarer.
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 11h27   #5
Débutant
 
Inscription : avril 2005
Messages : 464
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 464
Points : 69
Points : 69
Oui, bien sur que cette fonction renvoie une valeur par return.je vous ai pas donné tout le code.Le probléme est que dans cette fonction je modifie un des paramétres spécifiés.
madina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2006, 11h36   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 448
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 448
Points : 4 194
Points : 4 194
Crées une procédure avec 1 param IN OUT pour ton param modifiable, et 1 param OUT pour ta valeur de return.
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 09h00   #7
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Citation:
Envoyé par madina

J'ai mis d_unitcost comme out Number mais là au moment de l'appel, il me dit impossible d'appeler une fonction avec un paramétre out.
Je crois que l'on peut mettre des parametres en OUT dans une fonction le problème est je pense que tu l'appelles dans un select.

Dans ce cas il faut effectivment que des parametres en IN et un RETURN (ce qui est logique, où verait-on le resultat des parametres en OUT).

Il faut donc utiliser une variable local
Code :
1
2
3
4
5
6
7
 
CREATE OR REPLACE FUNCTION sg_overcost_keep( pal_projectname IN varchar2) IS
d_unitcost  number ;
begin
SELECT decode(d_unitcost,NULL,0.0,d_unitcost) INTO d_unitcost FROM dual;
RETURN  d_unitcost
end;
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 11h01   #8
Débutant
 
Inscription : avril 2005
Messages : 464
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 464
Points : 69
Points : 69
Effectivement, j'appelle la fonction dans un Select statement.Et le probléme est que la fonction est obligée de prendre d_unitcost en argument et ce d_unitcost est modifié au sein de cette fonction.
madina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2006, 16h10   #9
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
C'est pas possible ! !

Si tu veux avoir d_unitcost en paramtre il doit etre en IN.

A quoi cela sert que ta fonction mette a jour d_unitcost alors que tu peux pas le récupérer ?
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h58.


 
 
 
 
Partenaires

Hébergement Web