Oracle的dump函数

Oracle的dump函数



一、函数标准格式:

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;

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



About Me


.............................................................................................................................................

● 本文整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群号:230161599(满)、618766405

● 微信群:可加我微信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-09-01 09:00 ~ 2017-09-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

.............................................................................................................................................

● 小麦苗的微店:https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书:http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客户端扫描下面的二维码来关注小麦苗的微信公众号(xiaomaimiaolhr)及QQ群(DBA宝典),学习最实用的数据库技术。

   小麦苗的微信公众号      小麦苗的DBA宝典QQ群1     小麦苗的DBA宝典QQ群2        小麦苗的微店

.............................................................................................................................................

时间: 2024-09-16 07:27:55

Oracle的dump函数的相关文章

oracle中dump函数及oracle NUMBER类型内部存储机制

oracle中dump函数 转自:http://blog.vsharing.com/nimrod/A654847.html DUMP函数的输出格式类似: 类型 ,符号/指数位 [数字1,数字2,数字3,......,数字20] 各位的含义如下: 1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到) 2.长度:指存储的字节数 3.符号/指数位 在存储上,Oracle对正数和负数分别进行存储转换: 正数:加1存储(为了避免Null)负数:被101减,如果总长度小于21

mysql oracle 分割字符函数

问题描述 mysql oracle 分割字符函数 5C 8:5;71:41;1:8;2:12;3:17;4:20 这样格式的字段传一个冒号前面的值,输出冒号后面的值怎么实现 解决方案 google oracle实现split 解决方案二: select substring_index('8:5'':' -1) from table where substring_index('8:5'':' 1) = 8

Oracle 常用SQL函数

oracle|函数 时间:2005-02-18 Oracle的SQL函数分为单行函数和多行函数.单行函数只对单条记录有效,多行函数对多条记录有效. 单行函数包括,字符.数字.日期.转换和普通函数. 字符函数举例:• 全小写  LOWER('SQL Course')   sql course• 全大写 UPPER('SQL Course')     SQL COURSE •首字母大写 INITCAP('SQL Course')    Sql Course拼接 CONCAT('Good', 'Str

oracle的trunc函数使用示例

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss') from dual t;--sysdate和trunc(sysdate)是不一样的 sysdate在当天的零时零分零秒等于trunc(sysdate) select trunc(sysdate, 'dd'), trunc(sysdate) from dual t; --今天 20140703 零时零分

Oracle自定义聚集函数

自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG(), 但是这些预定义的聚集函数基本上都是适应于标量数据(scalar data), 对于复杂的数据类型,比如说用户自定义的Object type, Clob等, 是不支持的. 但是,幸运的是, 用户可以通过实现Oracle的Extensibility Framework中的ODCIAggregate interface来创建自定义聚集函数,而且自定义的聚集函数跟内建的聚集函数用法上没有差别.

Oracle反转倒置函数及单行转换函数

Oracle反转倒置函数 Oracle提供了一个反转倒置函数reverse,但此函数不能分组倒置,本文提供了一个即可分组倒置的函数,如下所示: CREATE OR REPLACE FUNCTION REVERSE_F(p_str VARCHAR2, p_delimiter VARCHAR2:='')   RETURN VARCHAR2 IS   v_return VARCHAR2(4000);   vp_str  VARCHAR2(4000) := p_str;   v_idx    numbe

Oracle创建WM_CONCAT函数

Oracle创建WM_CONCAT函数 WM_CONCAT这个函数会出错,所以从 11g开始.官方不认可 WM_CONCAT.然后就没这个函数了, 下面就是创建WM_CONCAT这个函数的步骤 第一步: 下载三个文件:owmctab.plb . owmaggrs.plb . owmaggrb.plb 第二步: 用sqlplus登录:CONN SYS/PASS_WORD AS SYSDBA; 一.忘记除SYS.SYSTEM用户之外的用户的登录密码. 用SYS (或SYSTEM)用户登录: CONN

thinkphp的dump函数无输出实例代码_php实例

Thinkphp的dump函数 /** * 浏览器友好的变量输出 * @param mixed $var 变量 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串 * @param string $label 标签 默认为空 * @param boolean $strict 是否严谨 默认为true * @return void|string */ function dump($var, $echo = true, $label = nul

oracle sql求教函数传参数问题

问题描述 oracle sql求教函数传参数问题 例如我有个表,我需要里面很多字段作为参数传到函数中.我只知道2种方法1.需要多少字段就设多少参数,但参数太多不想这么写2.或者只传个主键或rowid什么的进去再里面查询,但再查询怕影响速度. 求教有没方法能把整行数据都传进去,像触发器那样new.字段名 old.字段名能把数据取回来 解决方案 有没方法能把整行数据都传进去,像触发器那样new.字段名 old.字段名能把数据取回来 这样其实后台还是查询了一次,只不过是从内存中查,我建议你用第一个方法