Een datatype waarde van datum heeft altijd datum- en tijdcomponenten. als u alleen het tijdgedeelte van de datetime-waarde opgeeft zoals u deed, wordt het datumgedeelte standaard ingesteld op de eerste dag van de huidige maand.
Hier is een van de plaatsen (7e alinea) in de Oracle-documentatie waar dit gedrag is gedocumenteerd.
Er is ook ongedocumenteerde TIME
letterlijk en TIME
gegevenstype (moet worden ingeschakeld via 10407
(datetime TIME datatype creation) event) als u alleen tijd wilt gebruiken en opslaan, zonder datumgedeelte.
Hier is een kleine demonstratie van het gebruik van time
letterlijk en time
data type. Maar nogmaals, het is een ongedocumenteerde en niet-ondersteunde functie.
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
U kunt letterlijke tijd gebruiken zonder 10407
in te schakelen gebeurtenis, maar om een kolom van time
. te kunnen definiëren gegevenstype de 10407
evenement moet worden ingeschakeld:
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.
Nu kunnen we een tabel maken met een kolom van time
gegevenstype:
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.