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

PL/SQL Oracle Discussion :

calcule de fromule


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut calcule de fromule
    Bonjour


    j'ai un souci avec ce bout de code,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION CalculFromule (formule VARCHAR2)
    RETURN REAL IS resultat REAL;
    BEGIN
      select formule into resultat from DUAL;
      Return resultat;
    Exception
      when others 
      then return 0;
    END;
    Quand j'ai exécute une formule d'exemple 1+a il m'affiche une erreur
    ORA-00904:"A":invalid identifier
    MErci pour toute aider

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par anas.bah Voir le message
    Quand j'ai exécute une formule d'exemple 1+a il m'affiche une erreur
    Pouvez-vous nous indiquer exactement le code d'exécution?

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    Voici la requête
    Select CalculFromule(a+1) from dual

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par anas.bah Voir le message
    Voici la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select CalculFromule(a+1) from dual
    Vous avez 2 problèmes:
    - écrit comme cela, la variable "a" n'a pas d'existence
    - votre fonction ne fonctionnera pas car la formule ne sera pas interprétée. Votre variable "resultat" contiendra la chaîne "a+1" (en fait, ça plantera vu que c'est une variable réelle).

    Où voulez-vous en venir exactement? Quel est le but de la manoeuvre?

  5. #5
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    Bonjour,,

    Exactement je veux que ma fonction return 0 lors d'une exception comme cela a+1 ou bien une autre formule par exemple (1/0) ecora je veux pas avoir le message d'erreur
    ORA-00904:"A":invalid identifier
    .

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le paramètre de votre fonction est un VARCHAR2.
    Il faut donc lui envoyer une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CalculFromule('a+1') FROM dual
    Si vous ne mettez pas de quote, il cherchera des colonnes avec le nom a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a from dual;
     
    ORA-00904: "A" : identificateur non valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 'a' from dual;
     
    'A'
    --
    a
    Au passage en français on parle de formule, pas de fromule.

  7. #7
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    ok merci j'ai compris ,mais les autres formule d'exemple (1/0) comment ca se passe ???

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par anas.bah Voir le message
    ok merci j'ai compris ,mais les autres formule d'exemple (1/0) comment ca se passe ???
    Je crois que vous n'avez pas compris le fonctionnement.
    Avec votre fonction, faites des tests en mettant '1+1', puis 1+1. Cette fonction n'a aucun intérêt.

    Encore une fois, quel est le but recherché?

  9. #9
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    le problème je veux pas avoir le message
    ORA-01476:divisor isqual to zéro
    lors de exécution de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CalculFromule(1/0) from dual
    je sais que c'est une formule invalide mais je veux que ma fonction catch l'exception de le cas suivante 1/0

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Je reprends ce que je vous ai dit: votre fonction ne fonctionne pas car la formule ne sera pas interprétée.
    Si vous faites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CalculFormule(1/0) FROM DUAL;
    le calcul 1/0 est effectué avant l'appel de la fonction.
    Si vous faites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CalculFormule('1/0') FROM DUAL;
    la fonction telle qu'elle est actuellement renseigne la variable resultat avec la chaîne '1/0' et plante.

    Il faut passer par du SQL dynamique. Voici la bonne fonction:
    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
    16
    17
    CREATE OR REPLACE FUNCTION CalculFormule(p_formule VARCHAR2)
       RETURN REAL
    IS
       ln_resultat   REAL;
       ls_requete    VARCHAR2 (100);
    BEGIN
       ls_requete := 'SELECT ' || p_formule || ' FROM DUAL';
     
       EXECUTE IMMEDIATE ls_requete INTO ln_resultat;
     
       RETURN ln_resultat;
    EXCEPTION
       WHEN OTHERS
       THEN
          RETURN 0;
    END;
    /
    Et bien entendu, vous l'appelez avec une chaîne de caractères en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CalculFormule('1/0') FROM DUAL;
    SELECT CalculFormule('2*3') FROM DUAL;

  11. #11
    Membre averti
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Par défaut
    MErci BcP ce qui je cherche exactement.

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

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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