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/12/2006, 15h33   #1
Invité de passage
 
Inscription : novembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 9
Points : 2
Points : 2
Par défaut MAJ table avec fonction

Bonjour,

J'ai un montant euro et je souhaite renseigner dans ma table la valeur du montant en devise société.

J'ai pour cela créé une fonction où je passe en paramètre mon montant et mon code société et je renvoie mon montant convertie.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 FUNCTION FCT_CONV_DEV_STC(PR_mt_eur IN NUMBER, PR_ste_com_c IN VARCHAR2 )  RETURN NUMBER IS
 
    CONV_DEV_STC_return NUMBER;
 
  BEGIN
    -- Conversion du montant euro en devise de la societe
	SELECT (FCT_CONV_DEV_STC.pr_mt_eur*DIR_TPA) INTO CONV_DEV_STC_return
	FROM PMD_STC stc, PMD_TPA tpa
	WHERE FCT_CONV_DEV_STC.pr_ste_com_c = stc.ste_com_c
	AND stc.dev_c = tpa.cib_dev_c
	AND tpa.ori_dev_c='EUR'
	AND tpa.TPA_CRE_DT=(SELECT MAX(TPA_CRE_DT)FROM PMD_TPA);
 
  RETURN CONV_DEV_STC_return;
  END FCT_CONV_DEV_STC;
Lors de mon update la fonction me renvoie une valeur nulle.
(UPDATE PMD_COU
SET CR_STC=Pmd_Pck_General.FCT_CONV_DEV_STC(CR_EUR,ste_com_c))


quelqu'un a t-il une idée ?


Le problème me parait très simple mais je suis coincée !

Merci de vos réponses
aechevar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 15h52   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et si tu remplace (FCT_CONV_DEV_STC.pr_mt_eur*DIR_TPA) par NVL(FCT_CONV_DEV_STC.pr_mt_eur*DIR_TPA,0) ?

mais tu appelles la fonction alors que tu es déjà dedans ? c'est quoi FCT_CONV_DEV_STC.pr_mt_eur et FCT_CONV_DEV_STC.pr_ste_com_c ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 15h58   #3
Invité de passage
 
Inscription : novembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 9
Points : 2
Points : 2
Par défaut MAJ table avec fonction

Bonjour,

L'ajout de NVL ne change rien.

En fait non ma fonction est dans un package generale et moi je travaille dans un package specifique et je veux appeler cette fonction pour mettre à jour une colonne de ma table.

J'ai fait le test d'appeler ma fonction et de stocker le resultat dans une variable et là ça marche.

Par rapport à la requete CR_EUR et ste_com_c sont 2 colonnes de la table PMd_COU
(UPDATE PMD_COU
SET CR_STC=Pmd_Pck_General.FCT_CONV_DEV_STC(CR_EUR,ste_com_c))

...
aechevar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 16h42   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
donc c'est :

Citation:
SELECT (pr_mt_eur*DIR_TPA) INTO CONV_DEV_STC_return
FROM PMD_STC stc, PMD_TPA tpa
WHERE pr_ste_com_c = stc.ste_com_c
AND stc.dev_c = tpa.cib_dev_c
AND tpa.ori_dev_c='EUR'
AND tpa.TPA_CRE_DT=(SELECT MAX(TPA_CRE_DT)FROM PMD_TPA);
pourquoi tu préfixes le paramètre avec FCT_CONV_DEV_STC
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 16h55   #5
Invité de passage
 
Inscription : novembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 9
Points : 2
Points : 2
Ben c'est la syntaxe que j'ai trouvé dans ma doc !
si j'enlève le prefixe le résultat est le même.
aechevar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 17h00   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Et le trigger, il est fait comment ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 17h19   #7
Invité de passage
 
Inscription : novembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 9
Points : 2
Points : 2
J'ai pas de trigger ?
aechevar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 17h30   #8
Invité de passage
 
Inscription : novembre 2005
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 9
Points : 2
Points : 2
Sayez j'ai trouvé ... en fait j'avais un souci dans ma requete à l'interieur de la fonction.

Désolée pour ce temps perdu et merci de ton aide
aechevar 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 13h47.


 
 
 
 
Partenaires

Hébergement Web