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 Oracle Discussion :

problemes avec les triggers.


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut problemes avec les triggers.
    salut voila je viens de créer mes tables issues de mon mcd mais j'ai du mal avec les triggers,l'éxo et que je n'ai pas afficher dit:" quand un nouveau vol a eu lieu, non seulement le compteur de l'avion de l'avion est mis à jour mais aussi le compte d'un pilote doit être debité du cout du vol.

    voici mes tables:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    CREATE TABLE PILOTE(
    nom CHAR (30) ,
    prenom    CHAR (30),
    adresse   CHAR (30),
    NbHVol    INT ,
    Brevet    INT,
    position  FLOAT,
    Habil     CHAR (30),
    CONSTRAINTS pk_Pilote  PRIMARY KEY (nom)) ;
     
     
    CREATE TABLE AVION (
    immat     INT  ,
    TYPE    CHAR (30) ,
    PRIX      FLOAT,
    COMPTH  INT,
    CARAC    CHAR (30),
    CONSTRAINTS pk_Avion  PRIMARY KEY (immat));
     
     
     
     CREATE TABLE AEROCLUB (
     raison  char(30) ,
     divers  char(30),
    CONSTRAINTS pk_AEROCLUB  PRIMARY KEY (raison));
     
     
    CREATE TABLE MvtComptHvol(
    nom     CHAR (30)
    codmouv    CHAR(4),
    codnat      CHAR(4),
    datmouv         DATE,
    Montant  Float,
    CONSTRAINTS pk_MvtComptHvol PRIMARY KEY (nom));
     
     
     
    CREATE TABLE VOL (
    immat   INT,
    nomVol CHAR (30),
    nomFact CHAR (30),
    datdeb   DATE,
    datfin    DATE,
    compthdep  INT,
    compthfin   INT,
    CONSTRAINTS pk_VOL PRIMARY KEY (immat));
     
     
     
     
     
    CREATE TABLE  APPARTIENT_A (
    raison   CHAR (30) ,
     immat   INT   ,
    CONSTRAINT fk_APPARTIENT_A_immat_AVION FOREIGN KEY (immat)  REFERENCES  AVION (immat),
    CONSTRAINT fk_APPARTIENT_A_raison_AERO FOREIGN KEY (raison)   REFERENCES  AEROCLUB(raison));
     
     
     
    CREATE TABLE  Peut_Piloter (
    nom   CHAR (30) ,
    immat   INT   ,
    CONSTRAINT fk_Peut_Piloter_immat_AVION FOREIGN KEY (immat)  REFERENCES  AVION (immat),
    CONSTRAINT fk_Peut_Piloter_nom_Pilote FOREIGN KEY (nom)   REFERENCES  PILOTE (nom));
     
     
     
    CREATE TABLE  Membre_De(
    nom   CHAR (30) ,
    raison   CHAR   ,
    CONSTRAINT fk_Membre_De_raison_AERO  FOREIGN KEY (raison)  REFERENCES  AEROCLUB (raison),
    CONSTRAINT fk_Membre_De_nom_Pilote FOREIGN KEY (nom)   REFERENCES  PILOTE (nom));


    et voici mon trigger pour la mise à jour du compte du pilote qui s'effectue à chaque fois qu'il y a un vol.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER MAJ_Compte  
    AFTER INSERT   ON VOL 
    FOR EACH  ROW
    begin
    UPDATE PILOTE SET Pilote.position := pilote.position -new.prix
    end;

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    qu 'en pensez vous?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    voici le message d'erreur.

    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante/

    Vraiment je ne comprend pas j'ai bien crée la table VOL

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    C'est peut être pas ça mais ton new.prix n'est pas déclaré et n'est pas en rapport avec une table.

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    A priori, j'utiliserais plutôt = que :=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TRIGGER MAJ_Compte  
    AFTER INSERT   ON VOL 
    FOR EACH  ROW
    begin
    UPDATE PILOTE SET Pilote.position = pilote.position - new.prix
    end;
    Quel est le SGBD ?

    Avec Oracle par exemple, ce serait :new.prix.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A priori, j'utiliserais plutôt = que := 
     
    CREATE TRIGGER MAJ_Compte  
    AFTER INSERT   ON VOL 
    FOR EACH  ROW
    begin
    UPDATE PILOTE SET Pilote.position = pilote.position - new.prix
    end;
    Quel est le SGBD ?

    Avec Oracle par exemple, ce serait :new.prix.
    Oracle la version 10.Que penses tu de mon triggers pour une mise à jours, je me casse la tête mais je n'y arrive pa et je ne suis pas du genre à laisser tomber.Je veux variment comprendre.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par bouba69 Voir le message
    Oracle la version 10.Que penses tu de mon triggers pour une mise à jours
    Je pense qu'avec Oracle il faut écrire :new et pas new.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Je pense qu'avec Oracle il faut écrire :new et pas new.
    merci Antoun de me repondre car je ne savais pas qui m'adresser.Je n'ai pas compris pour new et que penses tu de mon trigger de mise à jour.Suis-je hors sujet,quelles sont mes erreurs.

    svp repond moi .

    merci d'avance

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Je pense qu'avec Oracle il faut écrire :new et pas new.
    j'ai parcouru le forum et je me pose une question doit-on obligatoirement declarer des variables (apres DECLARE) dans une trigger?Si oui pourquoi?

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Voici le code pour l'update, mais il te manque la condition pour mettre à jour le bon pilote !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE PILOTE 
    SET position = position - :new.prix
    WHERE nom = ....
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par McM Voir le message
    Voici le code pour l'update, mais il te manque la condition pour mettre à jour le bon pilote !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE PILOTE 
    SET position = position - :new.prix
    WHERE nom = ....
    le bon pilote?

  12. #12
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    quand un nouveau vol a eu lieu, non seulement le compteur de l'avion de l'avion est mis à jour mais aussi le compte d'un pilote doit être debité du cout du vol.
    Bon, je m'y connais un peu en aviation, mais il me semble qu'il y a plusieurs pilote dans la compagnie et que sur un vol, il n'y a qu'un pilote.
    Si tu mets à jour toute la table PILOTE, c'est pas bon.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    donc si j'insers trois ligne dans la table pilote cela voudra dire que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where nom= 'nom1,nom2,nom3'
    sinon je ne comprend pas .

  14. #14
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Réfléchis bien à ton exo : Si un vol est terminé, sur quel pilote dois-tu débiter le compte ?

    Essaye d'oublier le trigger et de faire les update à la main.
    Quand tu auras compris/vu/codé/testé ce que tu dois faire, tu pourras coder ton trigger.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    ou une autre solution.


  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par McM Voir le message
    Réfléchis bien à ton exo : Si un vol est terminé, sur quel pilote dois-tu débiter le compte ?
    sur le nom du pilote aux commandes de l'avion.

  17. #17
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par bouba69 Voir le message
    sur le nom du pilote aux commandes de l'avion.
    et comment on sait quel est le pilote aux commandes durant le vol ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    j'ai modifié mon trigger par rapport à mes faibles connaissances et les conseils que tu m'as donné.Mais il y a toujours des erreurs.


    voici le nouveau trigger que j'ai cree

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER MAJ_Compte  
    AFTER INSERT   ON VOL 
    FOR EACH  ROW
    begin
    UPDATE PILOTE SET Pilote.position = pilote.position - (select prix from avion ,peut_piloter,pilote  where avion.immat=peut_piloter.immat  and peut_piloter.nom = pilote .nom )*(select compthfin-compthdep from avion where pilote.nom=vol.nom))
     
    end;
    donc , apres avoir inseré une ligne dans la table vol ,mettre à jour la table pilote et plus precisement le champ postion, en , prenant la postion initiale de compte du pilote pour en deduire le prix du vol qui s'obtient par le prix de l'avion miltiplié par la difference du compteur horaire de l'avion au depart du compteur horaire de l'avion à l'arrivée.Pour que ceci se fasse les conditions sont que le nom du pilote aux commande du vol figure dans la table Pilote que l'immatriculation de l'avion utilisé lors du vol figure dans la table avions.


    Pourtant il y a des erreurs .Je sui perdu.Aidez moi SVP.

    ORA-04098: Déclencheur MAJ_Compte non valide. Echec de la
    revalidation

    qu'en pensez-vous?

  19. #19
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Qu'il faut que tu revoies les cours de SQL standard avant de te lancer dans des triggers.

    T'as essayé ce code sous SQL ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE PILOTE SET Pilote.position = pilote.position - (avion.prix*(avion.compthfin-compthdep))
    WHERE pilote.nom=Vol.nomvol AND vol.immat=avion.immat
    Comme je l'ai déjà dit : exécutes tes select/update les uns après les autres et quand ils fonctionnent tous, tu crées ton trigger.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  20. #20
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    1. Il faut que tu utilises :new à la place de Vol
    2. Tu utilises la table Avion, il faut donc que tu la mettes dans ton UPDATE
    3. Les deux conditions que tu as mises (même pilote, même avion) ne sont pas suffisantes, puisqu'il peut y avoir plusieurs vol du même avion par le même pilote
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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