Une valeur de type de données date a toujours des composants de date et d'heure. si vous spécifiez uniquement la partie heure de la valeur datetime comme vous l'avez fait, la partie date par défaut est le premier jour du mois en cours.
Voici l'un des endroits (7e paragraphe) dans la documentation Oracle où ce comportement est documenté.
Il y a aussi TIME
non documenté littéral et TIME
type de données (doit être activé via 10407
(événement datetime TIME datatype creation)) si vous avez besoin d'utiliser et de stocker uniquement l'heure, sans partie de date.
Voici une petite démonstration de l'utilisation de time
littéral et time
Type de données. Mais encore une fois, il s'agit d'une fonctionnalité non documentée et non prise en charge.
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
Vous pouvez utiliser l'heure littérale sans activer 10407
event, mais afin de pouvoir définir une colonne de time
tapez les données 10407
l'événement doit être activé :
SQL> create table time_table(time_col time);
create table time_table(time_col time)
*
ERROR at line 1:
ORA-00902: invalid datatype
-- enable 10407 event
SQL> alter session set events '10407 trace name context forever, level 1';
Session altered.
Nous pouvons maintenant créer une table avec une colonne de time
type de données :
SQL> create table time_table(time_col time);
Table created.
SQL> insert into time_table(time_col)
2 values(time '11:34:00');
1 row created.
SQL> select * from time_table;
TIME_COL
---------------
11.34.00 AM
SQL> alter session set events '10407 trace name context off';
Session altered.