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

 Oracle Discussion :

trigger sur update


Sujet :

Oracle

  1. #1
    Inscrit
    Inscrit en
    Février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 93
    Points : 96
    Points
    96
    Par défaut trigger sur update
    Bonjour,

    Je cherche à faire un trigger mais s'il se compile, il ne fonctionne pas comme je voudrais

    J'ai une table "collaborateurs" qui contient un champs "contratid" qui peut avoir 3 valeurs: STA (pour stage), CDD ou CDI.

    Le trigger doit empêcher la mise à jour des données si l'on cherche à modifier un collaborateur en le faisant passer de CDD à STA

    J'ai écrit ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create or replace
    trigger modifier_collaborateur_01
    before update
    on collaborateur
    for each row
    begin
    if (:old.contratid = 'CDD' AND :new.contratid = 'STA') then
    raise_application_error(-20101, 'ce changement de contrat n est pas autorisé');
    end if;
    end;

    Ca compile mais ca n'empêche pas la mise à jour.

    Si quelqu'un voit comment modifier correctement mon trigger, cela me rendra vraiment service

  2. #2
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Points : 124
    Points
    124
    Par défaut
    bonjour,

    que renvoit la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from collaborateur where contratid = 'CDD';

  3. #3
    Inscrit
    Inscrit en
    Février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 93
    Points : 96
    Points
    96
    Par défaut
    A la création de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT count(*) FROM collaborateur WHERE contratid = 'CDD';
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    COUNT(*)               
    ---------------------- 
    1                      
     
    1 rows selected
    Ensuite je fais un update:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE collaborateur 
    SET contratid = 'STA'
    WHERE idcollaborateur=1007;
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1 lignes mis à jour
    Du coup...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT count(*) FROM collaborateur WHERE contratid = 'CDD';
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    COUNT(*)               
    ---------------------- 
    0                      
     
    1 rows selected

    PS: Schéma partiel de ma base:
    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
     
    /*==============================================================*/
    /* Table : Collaborateur                                        */
    /*==============================================================*/
    CREATE TABLE Collaborateur  (
       IdCollaborateur        NUMBER(4)                      NOT NULL,
       ContratId              VARCHAR(3)                     NOT NULL,
       FonctionId             VARCHAR(3)                     NOT NULL,
       SexeId                 VARCHAR(1)                     NOT NULL,
       EtatCivilId            VARCHAR(3)                     NOT NULL,
       Nom                    VARCHAR(20)                    NOT NULL,
       DateEmbauche           DATE                           NOT NULL,
       DateFinContrat         DATE,
       Salaire                NUMBER                         NOT NULL,
       CentresDInterets       VARCHAR(50)                    NOT NULL,
       Adresse1               VARCHAR(25)                    NOT NULL,
       Adresse2               VARCHAR(25),
       CodePostal             VARCHAR(5)                     NOT NULL,
       Ville                  VARCHAR(10)                    NOT NULL,
       Telephone              VARCHAR(10)                    NOT NULL,
       CONSTRAINT PK_Collaborateur PRIMARY KEY (IdCollaborateur),
       CONSTRAINT FK_Collaborateur_Contrat FOREIGN KEY (ContratId)
             REFERENCES Contrat (IdContrat),
       CONSTRAINT FK_Collaborateur_Sexe FOREIGN KEY (SexeId)
             REFERENCES Sexe (IdSexe),
       CONSTRAINT FK_Collaborateur_EtatCivil FOREIGN KEY (EtatCivilId)
             REFERENCES EtatCivil (IdEtatCivil)
    );
     
    INSERT INTO Collaborateur (IdCollaborateur, ContratId, Fonctionid, SexeId, EtatCivilId, Nom, DateEmbauche, DateFinContrat, Salaire, CentresDInterets, Adresse1, Adresse2, CodePostal, Ville, Telephone)
    VALUES (1007, 'CDD', 'DEV', 'F', 'MLE', 'Aubry', '16/10/2008', '', 2500, 'java, c++', '14 rue du pont', '', '33000', 'Bordeaux', '0502255878');
    INSERT INTO Collaborateur (IdCollaborateur, ContratId, Fonctionid, SexeId, EtatCivilId, Nom, DateEmbauche, DateFinContrat, Salaire, CentresDInterets, Adresse1, Adresse2, CodePostal, Ville, Telephone)
    VALUES (1012, 'CDI', 'DEV', 'F', 'MME', 'Royal', '08/11/2003', '08/05/2007', 3000, 'java, c++', '8 rue de rennes', '', '22000', 'St Brieuc', '0299658545');
    INSERT INTO Collaborateur (IdCollaborateur, ContratId, Fonctionid, SexeId, EtatCivilId, Nom, DateEmbauche, DateFinContrat, Salaire, CentresDInterets, Adresse1, Adresse2, CodePostal, Ville, Telephone)
    VALUES (1033, 'STA', 'DEV', 'M', 'MR', 'Sarkozy', '08/05/2007', '', 350, 'gestion de projets', 'Elysée', '', '75001', 'Paris', '0123653252');

Discussions similaires

  1. [2008] Trigger sur Update, lignes multiples
    Par FlorianC dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/02/2013, 15h12
  2. Trigger sur UPDATE
    Par Laskar dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 01/10/2012, 17h58
  3. Trigger sur update d'un champ
    Par Fused dans le forum Développement
    Réponses: 3
    Dernier message: 05/08/2009, 19h45
  4. Problème lors d'un trigger sur update
    Par yonialhadeff dans le forum Développement
    Réponses: 1
    Dernier message: 09/10/2007, 08h44
  5. Trigger sur Update et Insert
    Par Jérôme Lambert dans le forum Développement
    Réponses: 2
    Dernier message: 11/12/2006, 13h52

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