Oracle数据库的DUMP函数可以显示某个数据的数据类型代码、长度(单位为字节)及其在数据库内部实际的存储形式(及字符集)。其语法为:
DUMP( expression [, return_format] [, start_position] [, length] )
return_format的默认值为10(十进制),可用值为8、10、16、17、1008、1010、1016或1017。其中,8为八进制,10为十进制,16为十六进制,17为单字符,1008为带字符集的八进制、1010为带字符集的十进制、1016为带字符集的十六进制、1017为带字符集的单字符集。
start_position是起始位置。
length为长度。
示例1
下面的示例会以不同的形式打印出字符“a”的编码:
select dump('a',8), dump('a',10), dump('a',16), dump('a',17) from dual
union all
select dump('a',1008), dump('a',1010), dump('a',1016), dump('a',1017) from dual;
这里Typ=96,为数据类型代码,这里表示CHAR类型。Len=1指长度。
显示的141、97、61是字符“a”在ASCII编码下八进制、十进制、十六进制的值。
示例2
employees表中,employee_id是number类型,last_name字段是varchar2类型,hire_date是date类型。
select dump(employee_id), dump(last_name), dump(hire_date) from employees where employee_id=100;
数据类型代码:
CODE | TYP |
---|---|
1 | VARCHAR2 |
2 | NUMBER |
8 | LONG |
12 | DATE |
23 | RAW |
24 | LONG RAW |
69 | ROWID |
96 | CHAR |
112 | CLOB |
113 | BLOB |
114 | BFILE |
180 | TIMESTAMP |
181 | TIMESTAMP WITH TIMEZONE |
231 | TIMESTAMP WITH LOCAL TIMEZONE |
182 | INTERVAL YEAR TO MONTH |
183 | INTERVAL DAY TO SECOND |
每种类型有其在数据库中对应的存储方式。
DATE类型是一个7字节宽的日期/时间数据类型。它包含7个属性:世纪、世纪中的哪一天、月份、月份中的哪一天、小时、分钟和秒。世纪和年份字节采用“加100”方式来存储。月份和日两个字节,则自然存储,不做修改。小时、分钟和秒采用“加1”方式来存储。