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 :

MAJ table avec fonction


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    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 ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    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))

    ...

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    donc c'est :

    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

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    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.

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Et le trigger, il est fait comment ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    J'ai pas de trigger ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    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

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

Discussions similaires

  1. Requête sur deux tables avec fonction COUNT
    Par islande dans le forum Langage SQL
    Réponses: 13
    Dernier message: 12/08/2013, 16h06
  2. [AC-2010] Problème maj table avec champs de formulaire
    Par ctsblv dans le forum VBA Access
    Réponses: 8
    Dernier message: 09/04/2013, 21h13
  3. [AC-2003] MAJ table avec synchro liste déroulante
    Par usac49 dans le forum IHM
    Réponses: 0
    Dernier message: 22/04/2010, 14h27
  4. MAJ table avec doublons
    Par nicerico dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/05/2009, 17h43
  5. Réponses: 7
    Dernier message: 14/02/2006, 10h33

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