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 :

[debutant] Trigger ou close check ? date naissance < sysd


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut [debutant] Trigger ou close check ? date naissance < sysd
    Bonjour!

    Voila j'utilise oracle 10 g .Voici mon problème:

    J'ai une table :
    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 CHAR(3)  NOT NULL,
        NOM CHAR(32)  NOT NULL,
        PRENOM CHAR(32)  NOT NULL,
        DATE_NAISSANCE DATE  NOT NULL,
        LIEU_NAISSANCE CHAR(32)  NULL,
        ADRESSE CHAR(100)  NOT NULL,
        CODEPOSTAL NUMBER(5)  NOT NULL,
        VILLE CHAR(32)  NOT NULL,
        NUMTEL NUMBER(10)  NULL,
        SECTEUR CHAR(40)  NOT NULL   CHECK (SECTEUR IN ('Administratif', 'Medical', 'Surveillance'))
    ,   CONSTRAINT PK_EMPLOYE PRIMARY KEY (CODE)  
       ) ;
    Je dois vérifier que la date de naissance de l'employe n'est pas supérieur à la date du jour.

    Je me suis donc dit que c'etait surement une contrainte Check mais je n'ai pas réussi.
    En revanche j'ai essayer un trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER add_employe
    BEFORE INSERT OR UPDATE OF DATE_NAISSANCE ON EMPLOYE FOR EACH ROW
    BEGIN
     IF :NEW.DATE_NAISSANCE >= SYSDATE THEN
           raise_application_error(-20001,'Date de naissance doit être inferieur a la date du jour!');
     END IF; 
    END;
    Et puis lorsque je force l'erreur j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ORA-20001: Date de naissance doit être inferieur a la date du jour!
    ORA-06512: à "BEN.ADD_EMPLOYE", ligne 3
    ORA-04088: erreur lors d'exécution du déclencheur 'BEN.ADD_EMPLOYE'
    Voila je me demande si l'erreur qu'il me fait part (ORA-04088) est normal?

    Et puis est ce que la façon dont je gère le problème est bien?
    N'existe t-il pas une contrainte check permettant de faire ca?

    Merci beaucoup par avance...

    Benoît

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    ah oui merci

    Bon alors mon trigger est t-il correct? la réponse d'oracle est - elle normal?

    Comment tu ferais a ma place?

    Merci!

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui tout est normal.

    Pour faire propre, il faut encadrer l'instruction INSERT et/ou UPDATE dans un block Begin Exception End; et gérer l'exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Begin
       Update ...
    Exception
      When others then
         If SQLCODE = -20001 Then
             .... votre message
         Else
             raise ;
         End if ;
    End;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    j'ai pas tout compris comment je devrais faire!

    Dans tous les cas j'aurais le même message?
    Je peux pas avoir seulement l'erreur que je dis soit : Date de naissance doit être inferieur a la date du jour! et pas les deux autres d'apres?

    Tant que j'y suis pourrais tu me donner une indication sur les codes erreurs? (20001,20002.... 20007)?

    Merci beaucoup pour ces réponses qui m'aident a avancer...

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Les codes entre -20000 et -20999 sont réservés aux utilisateurs, justement pour être utilisés dans l'instruction RAISE_APPLICATION_ERROR()
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    ok merci pour ton aide.

    Donc le resultat renvoyé par oracle est correct?
    Dans ce cas j'aurais réponse a ma question

    Encore merci

Discussions similaires

  1. [Debutant] Trigger d'insert
    Par Ykaar dans le forum Développement
    Réponses: 5
    Dernier message: 02/07/2007, 10h47
  2. Trigger d'Insertion et DATE
    Par spg40 dans le forum Oracle
    Réponses: 4
    Dernier message: 24/10/2006, 18h18
  3. [debutant]probleme de conversion de date
    Par julien31009 dans le forum Langage
    Réponses: 6
    Dernier message: 22/10/2006, 15h56
  4. [debutant]Probleme de requete avec date
    Par shub dans le forum Access
    Réponses: 9
    Dernier message: 12/05/2006, 10h01
  5. [Debutant] Ajouter un temps à une date
    Par Hokagge dans le forum MFC
    Réponses: 2
    Dernier message: 04/02/2006, 15h21

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