打印本文 打印本文 关闭窗口 关闭窗口
解析Oracle各种数据类型
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1890  更新时间:2009/4/22 22:04:18  文章录入:mintao  责任编辑:mintao
R2'''')
------------------------------------------------
测试

由于在SQL中直接使用DATE类型和Oracle存储的不一致,因此解析DATE和TIMESTAMP类型需要通过表中存储的数据,而不能通过SQL中的TO_DATE或SYSDATE。在SQL中直接使用的DATE类型的解析由于意义不大而没有给出。关于在SQL中直接使用DATE和存储在表中的DATE类型的区别,可以参考我的Oracle基本数据类型存储格式浅析中日期类型的文章,连接在文章末尾给出。

SQL> CREATE TABLE TEST_DATE (TIME1 DATE, TIME2 TIMESTAMP, TIME3 TIMESTAMP(9));

表已创建。

SQL> INSERT INTO TEST_DATE VALUES (SYSDATE,
  2  TO_TIMESTAMP(''''2004-4-9 22:59:43.234232222'''', ''''YYYY-MM-DD HH24:MI:SS.FF''''),
  3  TO_TIMESTAMP(''''2004-4-9 22:59:43.234232222'''', ''''YYYY-MM-DD HH24:MI:SS.FF''''));

已创建 1 行。

SQL> COL GET_DUMP FORMAT A30
SQL> ALTER SESSION SET NLS_DATE_FORMAT = ''''YYYY-MM-DD HH24:MI:SS'''';

会话已更改。

SQL> SELECT TIME1, F_GET_FROM_DUMP(DUMP(TIME1, 16), ''''DATE'''') GET_DUMP FROM TEST_DATE;

TIME1               GET_DUMP
------------------- ------------------------------
2005-04-09 23:00:04 2005-4-9 23:0:4

SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT = ''''YYYY-MM-DD HH24:MI:SS.FF'''';

会话已更改。

SQL> SELECT TIME2, F_GET_FROM_DUMP(DUMP(TIME2, 16), ''''TIMESTAMP'''') GET_DUMP
  2  FROM TEST_DATE;

TIME2                              GET_DUMP
---------------------------------- ------------------------
2004-04-09 22:59:43.234232         2004-4-9 22:59:43.234232

SQL> SELECT TIME3, F_GET_FROM_DUMP(DUMP(TIME3, 16), ''''TIMESTAMP(9)'''') GET_DUMP
  2  FROM TEST_DATE;

TIME3                              GET_DUMP
---------------------------------- ------------------------
2004-04-09 22:59:43.234232222      2004-4-9 22:59:43.234232222

对于SQL中直接使用的DATE类型会报错:

SQL> SELECT SYSDATE, F_GET_FROM_DUMP(DUMP(SYSDATE, 16), ''''DATE'''') GET_DUMP FROM DUAL;

SYSDATE             GET_DUMP
------------------- ------------------------------
2005-04-09 23:04:58 -###93-4-9 22:3:57

SQL> SELECT RAW_DATA, F_GET_FROM_DUMP(DUMP(RAW_DATA, 16), ''''RAW'''') GET_DUMP
  2  FROM TEST_RAW;

RAW_DATA             GET_DUMP
-------------------- ------------------------------
F5021C               f5021c

这个函数目前支持CHAR、VARCHAR2、NUMBER、DATE、TIMESTAMP和RAW类型,上面分别举了例子。

函数的第一个参数可以是DUMP函数的输出,也可以是数据库中的直接存储信息(需要用逗号分隔)。

SQL> SELECT F_GET_FROM_DUMP(''''Typ=96 Len=4: 74,65,73,74'''', ''''VARCHAR2'''') GET_DUMP
  2  FROM DUAL;

GET_DUMP
------------------------------
test

SQL> SELECT F_GET_FROM_DUMP(''''74,65,73,74'''', ''''VARCHAR2'''') GET_DUMP
  2  FROM DUAL;

GET_DUMP
------------------------------
test

编写这个函数所根据的规则来自下列文章:

Oracle基本数据类型存储格式浅析(一)——字符类型:http://blog.itpub.net/post/468/9287

Oracle基本数据类型存储格式浅析(二)——数字类型:http://blog.itpub.net/post/468/9445

Oracle基本数据类型存储格式浅析(三)——日期类型(一):http://blog.itpub.net/post/468/10113

Oracle基本数据类型存储格式浅析(三)——日期类型(二):http://blog.itpub.net/post/468/10293

Oracle基本数据类型存储格式浅析(三)——日期类型(三):http://blog.itpub.net/post/468/10582

Oracle基本数据类型存储格式浅析(三)——日期类型(四):http://blog.itpub.net/post/468/13636

Oracle基本数据类型存储格式浅析(四)——ROWID类型(一):http://blog.itpub.net/post/468/11046

Oracle基本数据类型存储格式浅析(四)——ROWID类型(二):http://blog.itpub.net/post/468/11363

Oracle基本数据类型存储格式浅析(五)——RAW类型:http://blog.itpub.net/post/468/11490

这个函数是由下面这个文章中的包进行修改的:

DBMS_REPAIR的使用(二):http://blog.itpub.net/post/468/13241

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口