征求了Eddie Awad的意见,计划以后不定期地翻译一些他的文章,这次先来一个比较简单的,也是Eddie昨天刚写的 – Cool SQL function: DUMP。
Cool SQL function:DUMP
我注意到在Tom Kyte的新书中,他多次使用了DUMP函数来获得一些内部的存储样式以及指定表达式的大小。老实说,我不怎么常使用这个函数,但是在某些情况下这个函数确实很有用。
DUMP(expr[, return_fmt
[, start_position [, length ] ]
]
)
DUMP函数返回一个包含了数据类型,字节长度和内部存储形式的VARCHAR2值。返回值通常是符合自己数据库的字符集类型的。
比如:
HR@XE> select dump('hello') from dual;
DUMP('HELLO')
---------------------------------
Typ=96 Len=5: 104,101,108,108,111
返回值告诉我们”hello”字串的长度是5ge字节,内部存储格式是”104,101,108,108,111″,数据类型是96,表示是字符串。Oracle文档给出了完整的类型代码以及说明。
默认是10进制格式,我们当然也可以转化成八进制,十六进制,甚至转成单个字符的样式。
比如,转成8进制
HR@XE> select dump('hello',8) from dual;
DUMP('HELLO',8)
---------------------------------
Typ=96 Len=5: 150,145,154,154,157
转成16进制:
HR@XE> c/8/16
1* select dump('hello',16) from dual
HR@XE> /
DUMP('HELLO',16)
----------------------------
Typ=96 Len=5: 68,65,6c,6c,6f
转成单个字符:
HR@XE> c/16/17
1* select dump('hello',17) from dual
HR@XE> /
DUMP('HELLO',17)
-----------------------
Typ=96 Len=5: h,e,l,l,o
默认情况下,返回值不包含字符集信息,如果我们想获得字符集信息的话,可以在转化字上加1000。比如,1017(用以替换17)表示返回单个字符样式并且同时返回字符集信息。
HR@XE> c/17/1017
1* select dump('hello',1017) from dual
HR@XE> /
DUMP('HELLO',1017)
-------------------------------------------------
Typ=96 Len=5 CharacterSet=WE8MSWIN1252: h,e,l,l,o
只要指定开始位置和长度,你也同样可以要求Oracle只返回内部存储值的一部分。
HR@XE> select dump('hello',17,1,3) from dual;
DUMP('HELLO',17,1,3
-------------------
Typ=96 Len=5: h,e,l
注意返回值里面的长度仍然是5,也就是说只有内部存储值这个部分才被截取了。
有些好奇,又没有人在自己的产品环境中使用了DUMP函数,并且整个程序的逻辑都是根据这个函数的返回值来运行的呢?
— 全文完
译者注:Eddie的blog上提供了多种语言的翻译,使用的应该是一个WP的插件,但是实际上翻译效果是让人忍俊不禁的,比如翻成中文,那么这篇blog的题目就变成了“凉快 SQL 作用: 转储”,OMG,凉快的作用…… 我倒是建议Eddie去掉这个功能算了。
另外,Eddie原创的几个Firefox Search Plugin for Oracle还是比较方便的,用Firefox的Oracle DBA们可以去下载来尝试一下。
晕,都开始翻译了阿
seen
签名:My Blog
————————–
http://xiangtool.nease.net/blog
嘿嘿,翻译是偷懒的勾当,好处在于省得总是不用,手生。
POO的blog布局还真是。。恩。。别具一格。