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 :

Problème avec un trigger


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème avec un trigger
    Bonjour à tous,
    dans le cadre d'un projet d'étude, je dois écrire un trigger qui verifie avant l'insertion de données dans ma table si les données fournit sont correctes:

    j'ai d'une part une table pays(id,nom,agemajorite) et d'autre part une table compte(id,pseudo,...,idpays);

    Or je ne dois pouvoir enregistré que les utilisateurs majeurs. C'est pourquoi je souhaite écrire un trigger qui verifie l'age en fonction de la date de naissance et de l'age de majorite du pays concerné. Voila mon trigger :

    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
    CREATE OR REPLACE TRIGGER trigger_majorite
    BEFORE INSERT ON COMPTE
    FOR EACH ROW                                                      
    DECLARE
    majorite INTEGER;
    datenaiss DATE;
    BEGIN
    SELECT pays.ageMajorite INTO majorite FROM pays,compte WHERE pays.id=(SELECT compte.idpays FROM compte) AND pays.id=compte.idpays ;
    SELECT compte.dateNaissance INTO datenaiss FROM compte ;
    majorite := majorite*12 ;
    IF (ADD_MONTHS (datenaiss, majorite) > sysdate)
    THEN dbms_output.put_line( 'Utilisateur non majeur !') ;
    END IF ;
    END ;
    /
    Le trigger se crée bien mais leve une erreur lors de l'exécution :

    *
    ERREUR Ó la ligne 1 :
    ORA-01427: sous-interrogation ramenant un enregistrement de plus d'une ligne
    ORA-06512: Ó "YOHANN.TRIGGER_MAJORITE", ligne 5
    ORA-04088: erreur lors d'exÚcution du dÚclencheur 'YOHANN.TRIGGER_MAJORITE'
    Je pense qu'il me manque une clause WHERE dans mes requetes mais cela reste très sombre.

    Pouvez vous m'aider SVP ?

    d'avance merci

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Dans un trigger, un select sur la même table provoque l'erreur de la table mutante (ora-04091).
    Voici un lien qui parle du problème de la table mutante (ora-04091)
    http://sgbd.developpez.com/oracle/ora-04091/
    Essaie ce 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
     
    CREATE OR REPLACE TRIGGER trigger_majorite
    BEFORE INSERT ON COMPTE
    FOR EACH ROW 
    DECLARE
    majorite INTEGER;
    BEGIN
    SELECT pays.ageMajorite INTO majorite FROM pays WHERE pays.id=:new.idpays   ;
    majorite := majorite*12 ;
    IF (ADD_MONTHS (:new.datenaiss, majorite) > sysdate)
    THEN 
    RAISE_APPLICATION_ERROR(-20000, 'Utilisateur non majeur !') ;
    END IF ;
    END ;
    /
    Remarque : on ne peut pas utiliser = quand une sous-requette ramène plusieurs enregistrements, on peut utliser à la place un exists
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * 
    from emp 
    where exists( select 1 from dept where emp.deptno=dept.deptno)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci, ca marche parfaitement bien maintenant ! merci Beaucoup !

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

Discussions similaires

  1. problème avec les triggers
    Par jakcam dans le forum Administration
    Réponses: 4
    Dernier message: 04/03/2008, 11h37
  2. Réponses: 4
    Dernier message: 27/11/2007, 15h32
  3. probléme avec un trigger
    Par sofiane1111 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2007, 11h17
  4. Problème avec un trigger...
    Par nasgektw dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2006, 17h41
  5. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 26/09/2005, 10h45

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