La fonction ne raméne aucune valeur

Fermé
bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009 - 15 janv. 2009 à 14:04
 elmahdi - 14 janv. 2010 à 10:51
Bonjour,


j'ecrits une fonction pl/sql sur oracle9 , je rencontre cette erreur:

ORA-06503: PL/SQL : La fonction ne ramène aucune valeur

n'hesiter pas de me donné une idé

2 réponses

dna.factory Messages postés 24924 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 avril 2024 1 609
15 janv. 2009 à 14:21
au hasard je dirais que ta fonction (une fonction doit obligatoirement retourner une et une seule valeur, par opposition à une procédure qui peut en retourner aucune ou plusieurs) ne ramène aucune valeur alors qu'elle devrait en ramener une.

Après, le message d'erreur est peut-etre codé le fourbe.
0
bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009
15 janv. 2009 à 14:59
exécuse moi parce que je te donne le message mal rédiger

à propos le probléme je ne vois pas que la fonction ne retourne rien, voici le code :

funcion f1 ( var1 in varchar2, var2 in varchar,.......var36 in varchar2) return integer is

begin

varlocal tab1.ch1%type;


insert into tab1( ch1,.......ch36)
values( var1,.............var21)returning ch1 into varlocal


insert into tab2(ch11, ...ch14)
values(var11,......varlocal);

return 0;
end f1;
0
dna.factory Messages postés 24924 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 avril 2024 1 609
15 janv. 2009 à 15:06
mes souvenirs datent un peu, et je ne connais pas ce langage, mais quel est l'intéret d'une fonction qui retourne juste 0
dans ce cas, autant utiliser le chiffre directement

je pense qu'ici tu as besoin d'une procédure, pour retourner toutes les valeurs modifiées
0
bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009 > dna.factory Messages postés 24924 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 avril 2024
15 janv. 2009 à 15:20
funcion f1 ( var1 in out varchar2, var2 in varchar,.......var36 in varchar2) return integer is

begin

varlocal tab1.ch1%type;


insert into tab1( ch1,.......ch36)
values( nvl(var1, '*'),.............var21)returning ch1 into var1


insert into tab2(ch11, ...ch14)
values(var11,......var1);

return 0;
end f1;


ici nvl(var1, '*') sivar1 null alors var1 est générer automatiqument par la base de donné, il lui donne un valeur de type varchar, et je veux récupérer ce code et l'inserer dans la table tab2.
0
dna.factory Messages postés 24924 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 avril 2024 1 609 > bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009
15 janv. 2009 à 16:31
je ne connais pas les bases de données et autres, mais si ça fonctionne comme les autres langage, je trouve surprenant qu'il soit possible de modifier les infos de la base de données avec une fonction
essaye de remplacer cette fonction par une procédure (si c'est possible avec oracle)
0
bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009 > dna.factory Messages postés 24924 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 16 avril 2024
15 janv. 2009 à 16:47
je ne peux pas faire une procédure, il faut étre une fonction.

merci pour cette discution, et j'essayera de trouver une solution
0
elmahdi > bouazizi06 Messages postés 14 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 23 mars 2009
14 janv. 2010 à 10:51
salut,

le message d'erreur, lier a votre select qui retourn rien, pour éviter ce problème il faut pensser a gerer les exception : ajouter juste avant la fin de la fonction

Exception
When No_data_found Then
Dbms_output.Put_line('Erreur 1');
When Others Then
Dbms_output.Put_line('Erreur 2');
0