Um valor do tipo de dados de data sempre tem componentes de data e hora. se você especificar apenas a parte de hora do valor de data e hora como fez, a parte de data será padronizada para o primeiro dia do mês atual.
Aqui está um dos lugares (7º parágrafo) na documentação do Oracle onde esse comportamento está documentado.
Também há
TIME
não documentado literal e TIME
tipo de dados (precisa ser ativado via 10407
(evento de criação de tipo de dados datetime TIME)) se você precisar usar e armazenar apenas a hora, sem parte da data. Aqui está uma pequena demonstração do uso de
time
literal e time
tipo de dados. Mas, novamente, é um recurso não documentado e sem suporte. SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
Você pode usar o literal de tempo sem ativar
10407
evento, mas para poder definir uma coluna de time
tipo de dados o 10407
evento precisa ser ativado: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.
Agora podemos criar uma tabela com uma coluna de
time
tipo de dados: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.