这两天有一套库报了ORA-01841错误,于是好好的研究了一下Oracle对Date类型日期格式的存储方式。那么对于date类型的日期,Oracle在底层会以7个byte来进行存储。分别是世纪、年、月、日、小时、分钟和秒。Oracle内部存储date结构如下:
BYTE Meaning
---- -------
1 Century -- stored in excess-100 notation
2 Year -- stored in excess-100 notation
3 Month -- stored in 0 base notation
4 Day -- stored in 0 base notation
5 Hour -- stored in excess-1 notation
6 Minute -- stored in excess-1 notation
7 Second -- stored in excess-1 notation
说这些比较抽象,我们先来看个例子。
SQL> select to_char(HIREDATE,'YYYY-MM-DD HH24:MI:SS') from emp where rownum<=1;
TO_CHAR(HIREDATE,'Y
-------------------
1980-12-17 00:00:00
SQL> select rowid from emp where rownum<=1;
ROWID
------------------
AAASZHAAEAAAACXAAA
SQL> select wid_block_number('AAASZHAAEAAAACXAAA') from dual;
DBMS_ROWID.ROWID_BLOCK_NUMBER('AAASZHAAEAAAACXAAA')
---------------------------------------------------
151
这里我们查出来该日期数据存在于文件4的151号块当中,我们使用bbed来查看数据库内部是怎么存储日期数据的。
BBED> set dba 4,151
DBA 0x01000097 (16777367 4,151)
BBED> p kdbr
sb2 kdbr[0] @118 8050
sb2 kdbr[1] @120 8007
sb2 kdbr[2] @122 7964
本文发布于:2024-02-01 16:33:17,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170677639537974.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |