Oracle的dump函數 算法
1、函數標準格式:ide
DUMP(expr[,return_fmt[,start_position][,length]])函數
基本參數時4個,最少能夠填的參數是0個。當徹底沒有參數時,直接返回null。另外3個參數也都有各自的默認值:編碼
expr:這個參數是要進行分析的表達式(數字或字符串等,能夠是各個類型的值)spa
return_fmt:指返回參數的格式,有5種用法:ci
1)8:以8進制返回結果的值字符串
2)10:以10進制返回結果的值(默認)it
3)16:以16進制返回結果的值io
4)17:以單字符的形式返回結果的值table
5)1000:以上4種加上1000,表示在返回值中加上當前字符集
start_position:開始進行返回的字符位置
length:須要返回的字符長度
2、示例
SYS@ tsid> select dump('abc') from dual;
DUMP('ABC')
----------------------
Typ=96 Len=3: 97,98,99
SYS@ tsid> select dump('abc',16) from dual;
DUMP('ABC',16)
----------------------
Typ=96 Len=3: 61,62,63
SYS@ tsid> select dump('abc',1016) from dual;
DUMP('ABC',1016)
--------------------------------------------
Typ=96 Len=3 CharacterSet=ZHS16GBK: 61,62,63
SYS@ tsid> select dump('abc',17,2,2) from dual;
DUMP('ABC',17,2,2
-----------------
Typ=96 Len=3: b,c
結果的格式通常都是相似:Typ=96 Len=3 [CharacterSet=ZHS16GBK]: 61,62,63
一、type
typ表示當前的expr值的類型。如:2表示NUMBER,96表示CHAR。
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
182 INTERVAL YEAR TO MONTH
183 INTERVAL DAY TO SECOND
208 UROWID
231 TIMESTAMP WITH LOCAL TIMEZONE
二、len
len表示該值所佔用的字節數。
對於漢字,ZHS16GBK編碼一個漢字須要2個字節,UTF8須要3個字節。
SQL> select dump('多多',1010) from dual;
DUMP('多多',1010)
-------------------------------------------------------
Typ=96 Len=6 CharacterSet=UTF8: 229,164,154,229,164,154
SQL> select dump('多多',1010) from dual;
DUMP('多多',1010)
---------------------------------------------------
Typ=96 Len=4 CharacterSet=ZHS16GBK: 182,224,182,224
SYS@ora11g > select dump(94082000000000000,16) from dual;
DUMP(94082000000000000,
-----------------------
Typ=2 Len=4: c9,a,29,53
SYS@ora11g > select dump(94082000000000000654,16) from dual;
DUMP(94082000000000000654,16)
---------------------------------------
Typ=2 Len=11: ca,5f,9,15,1,1,1,1,1,7,37
三、 Value
具體的存儲值。返回的數值就是Oracle在本身內部對前面的這個expr值得存儲形式。對於非漢字的普通字符串,能夠理解爲就是它的ASCII碼。舉例證實:
SYS@ tsid > select dump('a=?5') from dual;
DUMP('A=?5')
-------------------------
Typ=96 Len=4: 97,61,63,53
SYS@ tsid > select chr(97),chr(61),chr(63),chr(53) from dual;
C C C C
- - - -
a = ? 5
SYS@ tsid > select ascii('a'),ascii('='),ascii('?'),ascii('5') from dual;
ASCII('A') ASCII('=') ASCII('?') ASCII('5')
---------- ---------- ---------- ----------
97 61 63 53
ASCII碼錶:
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
ASCII值 |
控制字符 |
0 |
NUT |
32 |
(space) |
64 |
@ |
96 |
、 |
1 |
SOH |
33 |
! |
65 |
A |
97 |
a |
2 |
STX |
34 |
」 |
66 |
B |
98 |
b |
3 |
ETX |
35 |
# |
67 |
C |
99 |
c |
4 |
EOT |
36 |
$ |
68 |
D |
100 |
d |
5 |
ENQ |
37 |
% |
69 |
E |
101 |
e |
6 |
ACK |
38 |
& |
70 |
F |
102 |
f |
7 |
BEL |
39 |
, |
71 |
G |
103 |
g |
8 |
BS |
40 |
( |
72 |
H |
104 |
h |
9 |
HT |
41 |
) |
73 |
I |
105 |
i |
10 |
LF |
42 |
* |
74 |
J |
106 |
j |
11 |
VT |
43 |
+ |
75 |
K |
107 |
k |
12 |
FF |
44 |
, |
76 |
L |
108 |
l |
13 |
CR |
45 |
- |
77 |
M |
109 |
m |
14 |
SO |
46 |
. |
78 |
N |
110 |
n |
15 |
SI |
47 |
/ |
79 |
O |
111 |
o |
16 |
DLE |
48 |
0 |
80 |
P |
112 |
p |
17 |
DCI |
49 |
1 |
81 |
Q |
113 |
q |
18 |
DC2 |
50 |
2 |
82 |
R |
114 |
r |
19 |
DC3 |
51 |
3 |
83 |
X |
115 |
s |
20 |
DC4 |
52 |
4 |
84 |
T |
116 |
t |
21 |
NAK |
53 |
5 |
85 |
U |
117 |
u |
22 |
SYN |
54 |
6 |
86 |
V |
118 |
v |
23 |
TB |
55 |
7 |
87 |
W |
119 |
w |
24 |
CAN |
56 |
8 |
88 |
X |
120 |
x |
25 |
EM |
57 |
9 |
89 |
Y |
121 |
y |
26 |
SUB |
58 |
: |
90 |
Z |
122 |
z |
27 |
ESC |
59 |
; |
91 |
[ |
123 |
{ |
28 |
FS |
60 |
< |
92 |
/ |
124 |
| |
29 |
GS |
61 |
= |
93 |
] |
125 |
} |
30 |
RS |
62 |
> |
94 |
^ |
126 |
~ |
31 |
US |
63 |
? |
95 |
— |
127 |
DEL |
對於數字的存儲,不像字符那麼簡單,而是應用Oracle本身的一個算法。