You are on page 1of 4

一、函数标准格式:

DUMP(expr[,return_fmt[,start_position][,length]])

基本参数时 4 个,最少可以填的参数是 0 个。当完全没有参数时,直接返回 null。另外 3 个


参数也都有各自的默认值:
expr:这个参数是要进行分析的表达式(数字或字符串等,可以是各个类型的值)
return_fmt:指返回参数的格式,有 5 种用法:
1)8:以 8 进制返回结果的值
2)10:以 10 进制返回结果的值(默认)
3)16:以 16 进制返回结果的值
4)17:以单字符的形式返回结果的值
5)1000:以上 4 种加上 1000,表示在返回值中加上当前字符集
start_position:开始进行返回的字符位置
length:需要返回的字符长度

二、示例
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

1、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

2、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

3、 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;


CCCC
----
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 自己的一个算法。

You might also like