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

Langage SQL Discussion :

Problème sur les triggers


Sujet :

Langage SQL

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Problème sur les triggers
    Bonjour,

    Je vous envoi ce lien qui correspond au schéma des 2 tables les plus importantes:
    http://dl.free.fr/nvfTgILSA/Sanstitre.bmp

    Le 'NbrIntervention' correspond au nombre d'intervention par chaque client donc le champ 'NbrIntervention' est un champ calculé.

    Sur un précédent sujet, on ma dit de créer un trigger mais j'ai énormément de difficulté la dedans donc je voulais savoir si quelqu'un pouvait m'aider??

    Si vous avez besoin de plus de renseignement, faite moi signe.

    Merci d'avance!

  2. #2
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Il faudrait créer deux triggers sur la table INTERVENTION, un AFTERINSERT pour incrémenter (+1) le champ "Nbr_Intervention" et un autre AFTERDELETE pour décrémenter(-1) le même champ.
    Pour l'écriture des triggers, cela dépend du SGDB.
    Si vous êtes libre, choisissez le Logiciel Libre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    L'usage de triggers n'a acun intérêt dans votre cas car il est facile d'obtenir à tout moment cette somme. En effet encapsulez ce cacul dans une requête SQL SELECT et transformez là en vue.
    Après vous n'avez plus qu'à utiliser la vue. Ce sera mois couteux que d'utiliser un trigger.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à TryExceptEnd
    Bonjour,

    Merci beaucoup pour ce renseignement. Pourquoi décrémenter le champ après l'avoir incrémenté??

    Je compte pour le moment le faire sur papier puis ensuite je le traduirer sous SQL Server 2000. Si tu veux en savoir plus sur mon problème et ce que je recherche a faire voila le sujet principal là dessus :
    http://www.developpez.net/forums/sho...d.php?t=469535

    Je vais y réfléchir dés que j'aurais le temps mais si tu as d'autre idée ou plus d'explication, ya aucun souci.

    Merci d'avance.

    P.S : N'hésiter pas à aider!!

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SQLpro
    Bonjour,

    Je veux utiliser un trigger car je ne souhaite pas passer par une vue pour connaitre le nombre d'intervention mais par ma table CLIENT.
    Pour plus de renseignement, il faut aller voir sur le sujet suivant :
    http://www.developpez.net/forums/sho...d.php?t=469535

    Merci d'avance!!

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Et alors, vous pouvez faire une vue qui admet la table client et le nombre d'intervention. Il n'y a donc aucun intérêt encore une fois à utiliser un trigger sauf si vous voulez sciemment des performances lamentables dans les mises à jour pour votre base de données.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SQLpro
    Bonjour,

    Je comprend pas trop ce que tu veux dire par :
    vous pouvez faire une vue qui admet la table client et le nombre d'intervention
    Que veux tu dire par là?? Comment fais-tu cela?? car je débute un peu sous SQL Server 2000.

    Merci d'avance pour tes réponses.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Une vue est une requête. Une requête est une interrogation de tables...
    Vous pouvez donc mettre n'importe quelle table avec n'importe quelle autre par différentes opérations comme des jointures, des opération ensemblistes, des sous requêtes....


    Dans votre cas, par exemple :
    SELECT T.*, (SELECT COUNT(*) FROM AutreTable)
    FROM MaTable T
    Peut consistituer une vue et une vue n'est autre qu'une table...

    Lisez les cours que j'ai écrit sur mon site : http://sqlpro.developpez.com/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SQLpro
    d'accord SQLPro donc si je comprend bien une vue peut être rattaché a une table mais moi ce que je souhaite c'est que mon NbrIntervention soit dans la table 'CLIENT' et non que ce soit une requête ou une vue ... donc je vois pas comment tu veux que je fasse??

    Merci d'avance. DSL de te déranger!!

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Qu'est ce qu'une table ? Qu'est ce qu'une vue ???
    Comment faites vous pour distinguer une table d'une vue ?

    le jour ou vous aurez répondu correctement à ces questions votre esprit sera ouvert....
    Dans le principe on ne devrait JAMAIS utiliser des tables, mais uniquement des vues (schéma externe)
    Même des vues très simples comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW V_CLIENT
    AS
    SELECT *
    FROM  T_CLIENT
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SQLpro
    Ok, je vois.

    Bon je vais réfléchir ce qui serait le mieu pour mon projet.

    Merci beaucoup.

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut essai non concluant de trigger
    Bonjour,

    Je vient d'essayer de créer un trigger pour effectuer ce qu'il me faut mais malheureusement cela ne fonctionne pas, mais il ne m'indique aucune erreur donc je pense que mon trigger n'est pas bon donc je souhaiterais avoir votre aide s'il vous plait.

    Voici le trigger effectué :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    CREATE TRIGGER TR_NBINTER ON  [dbo].[INTERVENTION] 
    FOR INSERT, UPDATE
    AS
    DECLARE
    @Num_Clt  varchar(13),
    @Num_Inter  numeric(10),
    @res  numeric;
     
    BEGIN
     
    	SELECT @Num_Clt = C_NUMCLT
    	FROM CLIENT;
     
    	SELECT @Num_Inter = IN_NUMINTER
    	FROM  INTERVENTION;
     
    	SELECT @res = COUNT(IN_NUMINTER)
    	FROM INTERVENTION, CLIENT
    	WHERE CLIENT.C_NUMCLT = @Num_Clt
    	AND INTERVENTION.IN_NUMINTER = @Num_Inter;
     
    	if  (@res <> 0)
    	  BEGIN 
    		COMMIT
    	  END
    	ELSE 
    	  BEGIN
    		ROLLBACK 
    	  END
    END
    Merci d'avance!!

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Et qu'est censé faire ton trigger ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à al1_24
    Ben si t'aurait lu la discution tu aurais compris enfin pas grave t'inkiète pas.
    Mon trigger doit me compter le nombre d'intervention par client.
    Ce nombre doit s'afficher dans ma table CLIENT.

    J'espère être claire.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si tu avais lu et essayé de comprendre les réponses fournies par SQLPro, tu aurais déjà une solution simple et élégante à ton problème.

    Tu cherches à régler ton problème avec des triggers alors que ce n'est pas approprié pour ton besoin. Si tu veux t'essayer aux triggers, utilise les lorsque c'est vraiment nécessaire. Ici on a essayé de t'expliquer que ce n'était pas le caS.

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à vmolines
    Ben j'ai essayé de faire ce que SQLPro me disait mais je n'y arrivé pas.
    Je me suis renseigné autrement et j'ai donc réussit a compter le nombre d'intervention.

    Ceci s'effectue par un trigger (et oui on peut le faire aussi)

    La solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     CREATE TRIGGER E_INT_INS
    ON INTERVENTION  AFTER INSERT
    AS
    UPDATE CLIENT SET C_NBRINTER=
                               CASE 
                                   WHEN C_NBRINTER IS NULL then 1
                                   ELSE C_NBRINTER + 1
                               END
      FROM
    CLIENT C, INSERTED I WHERE I.IN_NUMCLT=C.C_NUMCLT
    Et cela fonctionne parfaitement.

    Merci a vous tous que même!!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/03/2006, 17h05
  2. j'ai un problème sur les hinstances
    Par ramaro dans le forum C++
    Réponses: 9
    Dernier message: 26/02/2006, 14h32
  3. Problème sur un Trigger
    Par Isa31 dans le forum Oracle
    Réponses: 35
    Dernier message: 28/10/2005, 09h48
  4. Question urgente sur les triggers
    Par devdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/11/2004, 10h38
  5. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

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