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 :

Problème avec heure et date


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut Problème avec heure et date
    Bonjour,

    Je travaille sous oracle 10.g,
    j'essaie de créer un triger en faisant des comparaisons sur les dates et les heures. Si le jour ou la date est déjà utilisée, je renvoie une erreur.
    Voici 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
    16
    17
    18
    19
     
    CREATE OR REPLACE TRIGGER verifLecon
    BEFORE INSERT ON CONDUITE
    FOR EACH ROW
    DECLARE
    	nbClient number(2);
    	nbVehicule number(2);
     
    BEGIN
    	select count(numvehicule) into nbVehicule
    	from conduite
    	where :new.numvehicule = conduite.numvehicule
    	and to_date(:new.date_conduite,'dd/mm/yyyy') = to_date(conduite.date_conduite,'dd/mm/yyyy')
    	and to_date(:new.date_conduite,'HH24:MI') = to_date(conduite.date_conduite,'HH24:MI');
     
    	IF nbVehicule > 0 THEN
    		RAISE_application_error(-20001, 'Nop caisse déjà enpruntée');
    	END IF;
    END;
    quand j'execute cette requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO CONDUITE VALUES(4,1,1,1,to_date('29/12/2003 14:28','DD//MM/YYYY HH24:MI'),1,'','');
    J'ai le mesasge d'erreur suivant :
    ERREUR à la ligne 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ORA-01850: les heures doivent être comprises entre 0 et 23
    ORA-06512: à "ING502.VERIFLECON", ligne 6
    ORA-04088: erreur lors d'exécution du déclencheur 'ING502.VERIFLECON'
    Je sais pas pourquoi ça me fait ça... si qqun peut me l'expliquer svp.
    PS : je tiens vraioment à comparer le jour et l'heure ds mon trigger.

    Merci !

  2. #2
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 65
    Points : 55
    Points
    55
    Par défaut
    d'accord je vois, je pensais que pour des comparaisons de date il aurait fallu garder le type date.
    Mais il me semble que j'ai aussi essayé avec des to_char et des to_number et ça déconnait aussi.
    Je testerai demain quand j'aurai accès au serveur, merci.

  4. #4
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par vraipolite Voir le message
    ...j'essaie de créer un triger en faisant des comparaisons sur les dates et les heures...
    Mais tu fais (essaies de faire) les comparaisons sur minutes aussi dans ton code!

    Je peux recommander:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trunc (:new.date_conduite, 'HH') = trunc (conduite.date_conduite, 'HH')
    par ex.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select to_char (trunc (sysdate, 'HH'), 'dd.mm.yyyy hh24:mi:ss') from dual;
    21.02.2008 06:00:00
    SQL> select to_char (trunc (sysdate, 'MI'), 'dd.mm.yyyy hh24:mi:ss') from dual;
    21.02.2008 06:26:00
    DAB

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 63
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par vraipolite Voir le message
    Bonjour,

    Je travaille sous oracle 10.g,
    j'essaie de créer un triger en faisant des comparaisons sur les dates et les heures. Si le jour ou la date est déjà utilisée, je renvoie une erreur.
    Voici 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
    16
    17
    18
    19
     
    CREATE OR REPLACE TRIGGER verifLecon
    BEFORE INSERT ON CONDUITE
    FOR EACH ROW
    DECLARE
        nbClient number(2);
        nbVehicule number(2);
     
    BEGIN
        select count(numvehicule) into nbVehicule
        from conduite
        where :new.numvehicule = conduite.numvehicule
        and to_date(:new.date_conduite,'dd/mm/yyyy') = to_date(conduite.date_conduite,'dd/mm/yyyy')
        and to_date(:new.date_conduite,'HH24:MI') = to_date(conduite.date_conduite,'HH24:MI');
     
        IF nbVehicule > 0 THEN
            RAISE_application_error(-20001, 'Nop caisse déjà enpruntée');
        END IF;
    END;
    quand j'execute cette requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO CONDUITE VALUES(4,1,1,1,to_date('29/12/2003 14:28','DD//MM/YYYY HH24:MI'),1,'','');
    J'ai le mesasge d'erreur suivant :
    ERREUR à la ligne 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ORA-01850: les heures doivent être comprises entre 0 et 23
    ORA-06512: à "ING502.VERIFLECON", ligne 6
    ORA-04088: erreur lors d'exécution du déclencheur 'ING502.VERIFLECON'
    Je sais pas pourquoi ça me fait ça... si qqun peut me l'expliquer svp.
    PS : je tiens vraioment à comparer le jour et l'heure ds mon trigger.

    Merci !
    Remplace ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and to_date(:new.date_conduite,'HH24:MI') = to_date(conduite.date_conduite,'HH24:MI');
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    and to_date(:new.date_conduite,'HH24') = to_date(conduite.date_conduite,'HH24')
     and to_date(:new.date_conduite,'MI') = to_date(conduite.date_conduite,'MI');

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    aucun intérêt

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

Discussions similaires

  1. Problème avec Heure et date
    Par dimitri70 dans le forum Excel
    Réponses: 4
    Dernier message: 28/08/2013, 10h38
  2. [Teradata] problème avec un champ date/heure
    Par gontrand16 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/06/2008, 20h35
  3. [Dates] Problème avec heure d'été
    Par crashou13 dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2007, 16h41
  4. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 14h44
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 13h33

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