Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/02/2008, 19h56   #1
Nouveau Membre du Club
 
Inscription : décembre 2004
Messages : 65
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 65
Points : 25
Points : 25
Envoyer un message via MSN à vraipolite
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 :
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 :
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 :
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 !
vraipolite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 20h15   #2
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
incroyable, to_date de nouveau:
http://www.developpez.net/forums/sho...hlight=to_date
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 21h52   #3
Nouveau Membre du Club
 
Inscription : décembre 2004
Messages : 65
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 65
Points : 25
Points : 25
Envoyer un message via MSN à vraipolite
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.
vraipolite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2008, 06h32   #4
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
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 :
trunc (:new.date_conduite, 'HH') = trunc (conduite.date_conduite, 'HH')
par ex.:
Code :
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
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2008, 21h31   #5
Membre du Club
 
Inscription : janvier 2008
Messages : 63
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 63
Points : 58
Points : 58
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 :
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 :
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 :
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 :
1
2
 
AND to_date(:new.date_conduite,'HH24:MI') = to_date(conduite.date_conduite,'HH24:MI');
par

Code :
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');
sdanvbnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2008, 12h58   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
aucun intérêt
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h27.


 
 
 
 
Partenaires

Hébergement Web