Un valore di tipo di dati data ha sempre componenti di data e ora. se specifichi solo la parte dell'ora del valore datetime come hai fatto, la parte della data per impostazione predefinita è il primo giorno del mese corrente.
Ecco uno dei posti (7° paragrafo) nella documentazione Oracle in cui è documentato questo comportamento.
C'è anche TIME
non documentato letterale e TIME
tipo di dati (deve essere abilitato tramite 10407
(datetime TIME datatype creation) evento) se è necessario utilizzare e memorizzare solo l'ora, senza la parte data.
Ecco una piccola dimostrazione dell'utilizzo di time
letterale e time
tipo di dati. Ma ancora una volta è una funzione non documentata e non supportata.
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
Puoi usare il valore letterale temporale senza abilitare 10407
evento, ma per poter definire una colonna di time
digitare il 10407
l'evento deve essere abilitato:
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.
Ora possiamo creare una tabella con una colonna di time
tipo di dati:
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.