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 Before Insert


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Trigger Before Insert
    * Bonjour, *

    Je veux créer un déclencheur sous Oracle permettant de garantir que le numéro de la salle dans la
    relation patientHospitalisé correspond bien à une salle dans le service de l’hôpital où le patient
    est hospitalisé .
    voila mes tables : Service (NumService, hôpital#, Nom, NumBloc, Directeur)
    patientHospitalisé (NumPatientHospt#, NumSalle, NumLit, dateEntrée, dateSortie)
    Salle (NumSalle, NumService#,NumHôpital#, Surveillant, NbLits)
    Hôpital (NumHopital, Nom, Adresse, Dirigeant) .
    et Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE TRIGGER my_trig 
    BEFORE INSERT
    ON PatientHospitalise
    FOR EACH ROW
    DECLARE 
    total INTEGER 
    BEGIN
    SELECT COUNT(NumSalle) INTO total FROM PatientHospitalise  WHERE NumSalle =:NEW.NumSalle and 
    IF total=0 THEN
    RAISE_APPLICATION_ERROR( -20001,'le message d'erreur' ) ;
    END IF;
    END;
    Après exécution de cette commande j'ai essayé d’insérer une salle dans la table PatientHospitalise et qui n'appartient pas au service de l’hôpital où le patient
    est hospitalisé mais Rien ne s'affiche !

    Est ce que quelqu'un peut m'aider s'il vous plait !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne vois pas l'intérêt du trigger.
    NumSalle dans la relation patientHospitalisé doit être clé étrangère vers la clé NumSalle de la table Salle.

    l’hôpital où le patient
    Avec vos relations présentées, le chemin patientHospitalisé -> Salle -> Service -> Hôpital permet de savoir où le patient est hospitalisé.

    Sinon fournissez le DDL des tables et un code de trigger qui compile.
    Montrer les insert que vous essayez de jouer et en quoi ça ne vous convient pas.

    Par ailleurs, votre trigger va vous remonter une exception de type table en mutation dans le cadre d'un INSERT INTO SELECT.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    En fait ce que je veux faire c'est lors de l'ajout d'un nouveau patient à la table PatientHospitalise
    on veut garantir que le numéro salle inseré correspond bien à une salle dans la table Salle Donc j'ai opté pour
    un déclencheur Before Insert On PatientHospitalise .

    Voila mon déclencheur modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE TRIGGER my_trig 
    BEFORE INSERT
    ON PatientHospitalise
    FOR EACH ROW
    DECLARE 
    total INTEGER 
    BEGIN
    SELECT count(NumSalle) INTO total FROM Salle  WHERE NumSalle =:NEW.NumSalle
    IF total=0 THEN
    RAISE_APPLICATION_ERROR( -20001,'le message d'erreur' ) ;
    END IF;
    END;
    Merci pour votre réponse !
    .

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Comme @skuatamad vous l'avez déjà dit:
    • Supprimez le trigger
    • Ajouter une contrainte clé étrangère

Discussions similaires

  1. [10g] Trigger before insert
    Par Lung dans le forum Oracle
    Réponses: 6
    Dernier message: 21/12/2007, 16h22
  2. Trigger Before Insert et Before Update
    Par NicoNours dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/08/2007, 10h20
  3. Trigger : Before insert
    Par guitou0 dans le forum Développement
    Réponses: 6
    Dernier message: 29/06/2007, 11h39
  4. Trigger Before Insert
    Par Fred_ET dans le forum Administration
    Réponses: 7
    Dernier message: 22/11/2006, 00h29
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

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