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

SQL Firebird Discussion :

Champ calculé ! vos suggestions


Sujet :

SQL Firebird

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Champ calculé ! vos suggestions
    Salut !
    dans une de mes tables, je dois calculer un champ. Tout naturellement FireBird doit être capable de le faire, je me suis documenté sur ça mais je me suis vite perdu

    mon champ doit calculé suite à une insertion ou modification donc j'ai exclu les procédures stockés et les UDF car ils doivent être appelés (c'est ce que j'ai compris ! vrai ou faux ?). je me suis retourné vers les déclencheurs et j'ai essayé de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR ALTER trigger tb_energie_aiu0 for tb_energie
    active after insert or update position 0
    AS
    begin
      RAP_PUISSANCE = (ENERGIE_REACTIVE/ENERGIE_ACTIVE)*100;
    end
    à la compilation j'ai eu droit à un beau message d'erreur; code erreur -206 que j'arrive pas à corriger

    1. est-ce le bon moyen pour faire un champ calculé ?
    2. que veut dire cette erreur ?


    merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (ENERGIE_REACTIVE/ENERGIE_ACTIVE)*100
    c'est le type d’écriture que doit prendre le champs calculé RAP_PUISSANCE.

    Est-ce bien un nombre réel ?

    Pour le trigger, je pense qu'il ne faut pas oublier d'utiliser le NEW
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR ALTER TRIGGER tb_energie_aiu0 FOR tb_energie
    active after INSERT OR UPDATE position 0
    AS
    begin
      NEW.RAP_PUISSANCE = (NEW.ENERGIE_REACTIVE/NEW.ENERGIE_ACTIVE)*100;
    end
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bonjour,

    Soit vous ajoutez la colonne RAP_PUISSANCE dans votre table et faite la mise à jour grace à un trigger (en utilisant le préfixe New. devant les nom des colonnes qui permettent de calcul de RAP_Puissance) comme l'a précisé Olivier.

    Soit vous créé une colonne calculée à votre table :
    Ce qui donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Alter TABLE tb_energie
    ADD RAP_PUISSANCE COMPUTED BY ((ENERGIE_REACTIVE  / ENERGIE_ACTIVE) * 100);
    Dans ces 2 cas on suppose que ENERGIE_ACTIVE est toujours <> 0 par la directive CHECK par exemple)

    Sinon il faut dans le trigger faire la vérification avant le calcul ou dans le computed By utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Alter TABLE tb_energie
    ADD RAP_PUISSANCE COMPUTED BY (CASE when ENERGIE_ACTIVE=0 then null else (ENERGIE_REACTIVE  / ENERGIE_ACTIVE) * 100 end);

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re,

    merci à vous deux. oui, manqué le new.
    je vais faire des essais et voir ce que ça donne.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Wéééééééééééé
    version finale ! j'ai ajouté un petit cast comme un grand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR ALTER trigger tb_energie_biu0 for tb_energie
    active before insert or update position 0
    AS
    begin
      new.RAP_PUISSANCE = (CASE when new.ENERGIE_ACTIVE = 0 then NULL
      else (cast(new.ENERGIE_REACTIVE as float) / new.ENERGIE_ACTIVE) * 100 end);
    end
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

Discussions similaires

  1. Group by à partir d'un champ calculé || substr
    Par SegmentationFault dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/07/2004, 15h55
  2. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04
  3. Réponses: 2
    Dernier message: 22/03/2004, 10h50
  4. champ calculé
    Par tomm dans le forum Bases de données
    Réponses: 22
    Dernier message: 25/02/2004, 00h31
  5. [TQuery] champs calculés
    Par Amenofis dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2004, 14h46

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