Bonjour,
J'ai eu le problème suivant:
Je souhaite obtenir la durée d'exécution d'un programme dont j'ai l'heure de début et l'heure de fin au format timestamp.
Si je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vDuree := vHeureFin - vHeureDebut;
je vais obtenir un interval, et je veux avoir un nombre de secondes, j'ai donc testé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vDuree := to_date(vHeureFin) - to_date(vHeureDebut)*SecInADay;
et la j'obtiens une erreur oracle m'indiquant que le masque de conversion est trop cours. J'ai résolu le problème en ajoutant une conversion to_char avant le to_date, avec un masque identique à chaque fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vDuree := (to_date(to_char(vHeureFin,'DD-MON-RR HH24:MI:SS'),'DD-MON-RR HH24:MI:SS') - to_date(to_char(vHeureDebut,'DD-MON-RR HH24:MI:SS'),'DD-MON-RR HH24:MI:SS'))*SecInADay;
Mes questions sont les suivantes:
1/Pourquoi oracle semble passer par un to_char implicite pour cette conversion? On pourrait logiquement penser que les deux types sont plus ou moins compatibles, non?

2/Y a t'il une autre solution plus simple pour faire çà, sachant que je souhaite conserver les types de données timestamp et number pour la durée?

Merci de vos réponses.