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] 没有相关教程
|