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

PL/SQL Oracle Discussion :

trigger et base de données


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut trigger et base de données
    *Bonjour*,

    J'ai une base de données ou il y a une table employe dont voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE employe
    (
    code VARCHAR2(3) NOT NULL,   
    NAS VARCHAR2(10),  
     Adr VARCHAR2(100),   
    Tel VARCHAR2(15),  
     Fonction VARCHAR2(50),   
    Service VARCHAR2(50),   
    NaissanceDate DATE,   
    Nom VARCHAR2(50), Prenom VARCHAR2(50),  
     CONSTRAINT emp_cod_pk PRIMARY KEY (code),   
    CONSTRAINT emp_NAS_uk UNIQUE (NAS),   
    CONSTRAINT emp_code CHECK (LENGTH(code)=3)   
    );
    Il m'est demandé de créer un trigger pour :
    La fonction de chaque employé doit être cohérente avec son service. les services proposées sont [medical, administratif, surveillances] les fonctions qui les coresponds [véterinaire, infermier, secretaire, conptable, surveillant et chef de zone]
    Quelqu'un peut-il me venir en aide ?

    Merci.

  2. #2
    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 778
    Points
    30 778
    Par défaut
    Montre-nous ce que tu as déjà essayé de faire en expliquant où tu rencontres un problème.
    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.

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    <code>
    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
    CREATE OR REPLACE TRIGGER VerifDateNaiss
    BEFORE INSERT OR UPDATE OF NaissanceDate ON employe
    FOR EACH ROW
    BEGIN
    IF (:NEW.Service ='Administratif')
    THEN
    set new.Fonction:='Secrétaire' or set new.Fonction:='Comptable';
    else IF (:NEW.Service ='Surveillance')
    THEN
    set new.Fonction:='Surveillant' or set new.Fonction:='chefDeZone';
    else IF (:NEW.Service ='Médicale')
    THEN
    set new.Fonction:='Véterinaire' or set new.Fonction:='infirmier ';
     
    else RAISE_APPLICATION_ERROR(-20002,'les fonctions ne sont pas cohérents avec les services ');
    END;

  4. #4
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Montre-nous ce que tu as déjà essayé de faire en expliquant où tu rencontres un problème.

    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 OR REPLACE TRIGGER VerifDateNaiss
    BEFORE INSERT OR UPDATE OF NaissanceDate ON employe
    FOR EACH ROW
    BEGIN
    IF (:NEW.Service ='Administratif')
    THEN
    set new.Fonction:='Secrétaire' or set new.Fonction:='Comptable';
    else IF (:NEW.Service ='Surveillance')
    THEN
    set new.Fonction:='Surveillant' or set new.Fonction:='chefDeZone';
    else IF (:NEW.Service ='Médicale')
    THEN
    set new.Fonction:='Véterinaire' or set new.Fonction:='infirmier ';
     
    else RAISE_APPLICATION_ERROR(-20002,'les fonctions ne sont pas cohérents avec les services ');
    END;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Hello,

    J'ai du mal à comprendre ton code mais un truc qui me semble bizaroïde c'est ton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET :new.fonction := ... OR set :new.fonction :=
    Ce qui me choque ou plutôt m'interpelle c'est deux affectation sur la même ligne.

    Ne chercherais-tu pas plutôt à faire ceci :
    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
     
    CREATE OR REPLACE TRIGGER VerifDateNaiss
       BEFORE INSERT OR UPDATE OF NaissanceDate
       ON employe
       FOR EACH ROW
    BEGIN
       IF     (:NEW.Service = 'Administratif')
          AND (:new.Fonction = 'Secrétaire' OR :new.Fonction = 'Comptable')
       THEN
          NULL;
       ELSIF     :NEW.Service = 'Surveillance'
             AND (:new.Fonction = 'Surveillant' OR :new.Fonction = 'chefDeZone')
       THEN
          NULL;
       ELSIF     :NEW.Service = 'Médicale'
             AND (:new.Fonction = 'Véterinaire' OR :new.Fonction = 'infirmier ')
       THEN
          NULL;
       ELSE
          RAISE_APPLICATION_ERROR (
             -20002,
             'les fonctions ne sont pas cohérents avec les services ');
       END IF;
    END;
    Sans doute à écrire un peu mieux. Avoir des NULL comme instruction pour ne rien faire entre les IF c'est pas TOP.

    J'espère que l'idée générale t'aidera.

    Cordialement,

    Bernard

Discussions similaires

  1. base de donnée trigger et datatable
    Par mrrenard dans le forum C#
    Réponses: 1
    Dernier message: 19/02/2008, 16h13
  2. Trigger + accès à une base de données
    Par rouche dans le forum Développement
    Réponses: 2
    Dernier message: 05/04/2006, 09h39
  3. [Oracle 9i] Trigger base de données
    Par Herveg dans le forum Oracle
    Réponses: 7
    Dernier message: 21/12/2005, 16h17
  4. [Modèle Relationnel] Une base de données sans liens ni triggers
    Par Promeneur dans le forum Schéma
    Réponses: 15
    Dernier message: 27/05/2005, 11h35
  5. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 11h02

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