SYS_OP_MAP_NONNULL操作
無意在資料庫中發現了這個操作SYS_OP_MAP_NONNULL。
SYS_OP_MAP_NONNULL應該不是資料庫中的物件,因為在DBA_OBJECTS中根本找不到它,而在STANDARD和DBMS_STANDARD包中也找不到函式說明。
SQL> SELECT *
2 FROM DBA_OBJECTS
3 WHERE OBJECT_NAME = 'SYS_OP_MAP_NONNULL';
未選定行
SQL> SELECT *
2 FROM DBA_SOURCE
3 WHERE UPPER(TEXT) LIKE '%SYS_OP_MAP_NONNULL%';
未選定行
SYS_OP_MAP_NONNULL又可以跟引數,它不符合偽列的特性,因此暫且認為這是一個操作。不過文件中並沒有這個操作的任何相關記錄。
其實這個操作實現的就是DUMP函式的功能:
SQL> SELECT SYS_OP_MAP_NONNULL(5) FROM DUAL;
SYS_OP
------
C10600
SQL> SELECT SYS_OP_MAP_NONNULL('A') FROM DUAL;
SYS_
----
4100
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), SYS_OP_MAP_NONNULL(SYSDATE) FROM DUAL;
TO_CHAR(SYSDATE,'YY SYS_OP_MAP_NONNU
------------------- ----------------
2010-08-06 02:19:47 786E080603143000
SQL> SELECT SYS_OP_MAP_NONNULL(NULL) FROM DUAL;
SY
--
FF
和DUMP的區別在於NULL的處理上,DUMP的引數如果是NULL,返回結果也是NULL,而SYS_OP_MAP_NONNULL返回的是FF,而這正是NULL儲存在資料塊中的編碼。
SQL> SELECT DUMP(NULL) FROM DUAL;
DUMP
----
NULL
可以認為SYS_OP_MAP_NONNULL返回的就是這個資料型別儲存的編碼:
SQL> CREATE TABLE T_TEST
2 (ID NUMBER,
3 C1 LONG,
4 C2 CLOB);
表已建立。
SQL> INSERT INTO T_TEST
2 VALUES (1, 'ABC', 'DEF');
已建立 1 行。
SQL> SELECT DUMP(C1) FROM T_TEST;
SELECT DUMP(C1) FROM T_TEST
*
第 1 行出現錯誤:
ORA-00997: 非法使用 LONG 資料型別
SQL> SELECT DUMP(C2) FROM T_TEST;
SELECT DUMP(C2) FROM T_TEST
*
第 1 行出現錯誤:
ORA-00932: 資料型別不一致: 應為 -, 但卻獲得 CLOB
SQL> SELECT SYS_OP_MAP_NONNULL(C1) FROM T_TEST;
SYS_OP_MAP_NONNULL(C1)
--------------------------------------------------------------------------------------------
01000186000000D104000000820100012A9013002A90130008003F00E83F000000000000000000000000D7D103003200030000000000000060000000909500D1030100000000000000000000000000000000000000000000000000000000000000000000080000005496D7D10301000004002A009E0900004400C0006C0E150
SQL> SELECT SYS_OP_MAP_NONNULL(C2) FROM T_TEST;
SYS_OP_MAP_NONNULL(C2)
-------------------------------------------------------------------------------------------
006A0001020C8800000200000001000000AB8D630013902B0013902A000300030354000100440045004600000000000000000000D1D7965701030004002A0000099E00C000440E6C150000000013902A0100018600000016090000000000000600000000000100440045004600
二者還有一個很重要的區別就是DUMP不支援LONG以及大物件,而SYS_OP_MAP_NONNULL則支援任意的資料型別。
利用Oracle的這個功能,可以更方便的檢查資料的儲存格式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-670386/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JQ操作標籤--樣式操作、 位置操作、尺寸、 文字操作、 獲取值操作、 屬性操作、文件處理、事件事件
- sqlite相關--------adb shell操作,工具操作,程式操作SQLite
- Go 操作 Redis 的基本操作GoRedis
- 常用操作 / 資料庫操作資料庫
- 原子操作 vs 非原子操作
- 操作
- 坐下坐下,基本操作(ZooKeeper 操作篇)
- JavaScript騷操作之操作符JavaScript
- Java檔案操作 讀寫操作Java
- Hive高階操作-查詢操作Hive
- 使用java操作ranger,hdfs ranger授權操作,hive ranger授權操作JavaRangerHive
- Go 語言操作 MySQL 之 CURD 操作GoMySql
- Oracle並行操作——並行DML操作Oracle並行
- js操作JS
- gorm 操作GoORM
- firewalld操作
- DOM 操作
- docker操作Docker
- Jedis操作
- Git 操作Git
- BOM操作
- mongoDB操作MongoDB
- DOM操作
- npm 操作NPM
- SourceTree 操作
- mysql操作MySql
- 操作欄
- 操作格子
- 快捷操作
- fileStream操作
- maven 操作Maven
- 奇怪++操作
- IO操作
- 操作cookieCookie
- rman操作
- Sqlldr操作SQL
- 組操作
- XML操作XML