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 :

[FireBird]Edition soumis a une condition


Sujet :

SQL Firebird

  1. #1
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut [FireBird]Edition soumis a une condition
    salut a tous

    je vous présente mon problèmes.
    J'ai une table articles avec un champs TYPE_MOUV qui prend les valeur (PUMP,FIFO et LIFO)
    j'aimerai que ce champs soit interdit pour modification si cet article présente des mouvement qui sont référencés dans une autres Table LIGNE_RECEP (c'est a dire en définit le type mouvement dés qu'une réception a été faite il devient non editable).
    j'ai pensez a un trigger qui va déclencher une exception.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Oui effectivement tu peux utiliser un trigger pour effectuer ta vérification.
    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 trigger article_bu0 for article
    active before update position 0
    as
      declare variable v_count integer;
    begin
      if (new.type_mouv <> old.type_mouv) then
      begin
        select count(*)
        from ligne_recep
        where article_id = new.article_id
        into :v_count;
     
        if (v_count > 0) then
          exception err_edit_type_mouv;
      end
    end
    @+ Claudius

  3. #3
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    hargh !!!

    pas select count, surtout pas !

    Exist est de loin plus efficace
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par makowski
    pas select count, surtout pas !
    Une ch'tiote explication Philippe !
    Il est vrai qu'un exist est peut-être plus efficace, mais pourquoi éviter un select count ?

    Merci d'avance pour tes infos.

    @+ Claudius

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    parce qu'un select count va lire tous les enregistrements correspondants à tes critères
    Exists lui va s'arrêter dès le premier enregistrement trouvé

    et dans certains cas, cela fait une grosse grosse différence de temps de traitement

    bref dans Firebird éviter au maximum le count, sauf quand bien sûr on a vraiment besoin de dénombrer
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par makowski
    Exists lui va s'arrêter dès le premier enregistrement trouvé
    Evidemment ca change tout !

    Merci

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    alors avec Exist le trigger devindra
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TRIGGER article_bu0 FOR article
    active before UPDATE position 0
    AS
     
    begin
      IF (new.type_mouv <> old.type_mouv) then
      begin
        IF EXIST (SELECT article_id
        FROM ligne_recep
        WHERE article_id = new.article_id) THEN
           exception err_edit_type_mouv;
      end
    end

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/02/2011, 13h48
  2. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13
  3. Réponses: 5
    Dernier message: 29/09/2004, 11h05
  4. Réponses: 2
    Dernier message: 24/06/2004, 09h13
  5. comment vérifier qu'une table esclave vérifie une condition?
    Par loikiloik dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2004, 16h48

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