- 浏览: 436181 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
adaylee:
貌似好久没上了
用iptables 实现本地端口转发 -
adaylee:
鲫鱼?哈哈,居然Google到你了
用iptables 实现本地端口转发 -
yflxc:
com.sun.jimi.core.raster.JimiRa ...
java对图片进行等比例缩放 -
bo_hai:
等比例压缩的算法是不是可以改进呢?
java对图片进行等比例缩放 -
Mr.TianShu:
http://www.cppblog.com/deercode ...
java 遍历目录下的文件
dump函数(number类型) 笔记
dump 函数能查看表中列在datafile存储内容。
Oracle的NUMBER类型最多由三个部分构成,这三个部分分别是最高位表示位、数据部分、符号位。其中负数包含符号位,正数不会包括符号位(10进制即102)。另外,数值0比较特殊,它只包含一个数值最高位表示位80(16进制),没有数据部分。
用法:DUMP(expr[,number_format[,start_position][,length]])
用法说明: dump(col_name,8|10|16|17) ,其中8|10|16|17 为number_format,分别为8进制,10进制(默认值),16进制,单字符。
DUMP函数的输出格式类似:
类型 <[长度]>,符号/指数位 [数字1,数字2,数字3,......,数字20]
各位的含义如下:
1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到,见结尾)
2.长度:指存储的字节数
3.符号/指数位
在存储上,Oracle对正数和负数分别进行存储转换:
正数:加1存储(为了避免Null),在实际算法中就是要减1,必须>128
负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要),必须<128
指数位换算:
正数:指数=符号/指数位 - 193 (第一字节)
负数:指数=62 - 第一字节
4.从<数字1>开始是有效的数据位
从<数字1>开始是最高有效位,所存储的数值计算方法为:
将下面计算的结果加起来:
每个<数字位>乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)
===numbe类型例子====
例1:(区别正数和负数)
SQL> select dump(0) from dual;
DUMP(0)
--------------------------------
Typ=2 Len=1: 128
##
例1中可以看见,为什么>128断定为正数,而<128 断定为负数(10进制)
## 16进制分析正数和负数
SQL> select dump(0,16) from dual;
DUMP(0,16)
------------------------------
Typ=2 Len=1: 80--------------------(只有高位)
1 row selected.
DUMP(0) 的结果是0x80,在前面已经提到,0只有高位表示位,没有数据位。由于0的特殊,既不属于正数,也不属于负数,因此使用高位表示位用80表示就足够了, 不会和其它数据冲突,Oracle出于节省空间的考虑将后面数据部分省掉了。但是为什么Oracle选择0x80表示0呢?我们知道正数和负数互为相反 数,每个正数都有一个对应的负数。因此如果我们要使用编码表示数值,则表示正数和负数的编码应该各占一半,这样才能保证使Oracle表示数据范围是合理的。而0x80的二进制编码是1000 0000,正好是一个字节编码最大值的一半,因此,Oracle选择0x80来表示0,是十分有道理的。
@@@@
例2:(正数)
SQL> select dump(1,10) from dual;
DUMP(1,10)
------------------------------------
Typ=2 Len=2: 193,2
| |
高位,数据部分
1 row selected.
##
SQL> select dump(1) from dual;
DUMP(1)
------------------------------------
Typ=2 Len=2: 193,2
1 row selected.
##
例2中可以看见dump(1,10)和dump(1) 输出结果一样:Typ=2 Len=2: 193,2
类型是number,2字节,因为正数所以>128,因为正数所以存储时候都+1
<指数>: 193 - 193 = 0
<数字1> 2 - 1 = 1 *100^(0-0)
= 1
@@@@@@@@
例3:(正数指数变化)
SQL> select dump(99) from dual;
DUMP(99)
----------------------------------------
Typ=2 Len=2: 193,100
1 row selected.
##
SQL> select dump(100) from dual;
DUMP(100)
------------------------------------
Typ=2 Len=2: 194,2
1 row selected.
例3对比就知道,第一字节指数从193变化到194
@@@@@@@@@@@
例4:(负数)
SQL> select dump(-98) from dual;
DUMP(-98)
------------------------------------------
Typ=2 Len=3: 62,3,102
| | |
高位,数据部分,符号位
1 row selected.
<指数> 62 - 62 = 0
<数字1> 101 - 3 = 98 *100^(0-0)
= 98
##
SQL> select dump(-99) from dual;
DUMP(-99)
------------------------------------------
Typ=2 Len=3: 62,2,102
1 row selected.
<指数> 62 - 62 = 0
<数字1> 101 - 2 = 99 *100^(0-0)
= 99
###
SQL> select dump(-100) from dual;
DUMP(-100)
----------------------------------------------
Typ=2 Len=3: 61,100,102
1 row selected
最后加102是目的:
实际存储中-98 为62,3
-99 为62,2
-100为61,100
得知-98>-99>-100
但是如果
SQL> select dump(-98.001) from dual;
DUMP(-98.001)
--------------------------------------------------------
Typ=2 Len=5: 62,3,101,91,102
1 row selected.
通过这个得知 没有102:-98.001为 62,3,101,91 >-98 为62,3
有102:-98.001为 62,3,101,91,102
-98 为 62,3,102
所以加102目的是排序的需要!
例5:(数字位算法)
SQL> select dump(7654321) from dual;
DUMP(7654321)
------------------------------------------------------
Typ=2 Len=5: 196,8,66,44,22
1 row selected.
<指数>: 196 - 193 = 3
<数字1> 8 - 1 = 7 *100^(3-0) 7000000
<数字2> 66 - 1 = 65 *100^(3-1) 650000
<数字3> 44 - 1 = 43 *100^(3-2) 4300
<数字4> 22 - 1 = 21 *100^(3-3) 21
##
SQL> select dump(87654321) from dual;
DUMP(87654321)
--------------------------------------------------------
Typ=2 Len=5: 196,88,66,44,22
1 row selected.
<指数>: 196 - 193 = 3
<数字1> 88 - 1 = 87 *100^(3-0) 87000000
<数字2> 66 - 1 = 65 *100^(3-1) 650000
<数字3> 44 - 1 = 43 *100^(3-2) 4300
<数字4> 22 - 1 = 21 *100^(3-3) 21
×××××××××××××××
类型代码(参考)
代码 数据类型 oracle 版本
1 varchar2 7
2 number 7
8 long 7
12 date 7
23 raw 7
24 long raw 7
69 rowid 7
96 char 7
112 clob 8
113 blob 8
114 bfile 8
180 timestamp 9i
181 timestamp with timezone 9i
182 interval year to month 9i
183 interval day to second 9i
208 urowid 8i
231 timestamp with local timezone 9i
Oracle的NUMBER类型最多由三个部分构成,这三个部分分别是最高位表示位、数据部分、符号位。其中负数包含符号位,正数不会包括符号位(10进制即102)。另外,数值0比较特殊,它只包含一个数值最高位表示位80(16进制),没有数据部分。
用法:DUMP(expr[,number_format[,start_position][,length]])
用法说明: dump(col_name,8|10|16|17) ,其中8|10|16|17 为number_format,分别为8进制,10进制(默认值),16进制,单字符。
DUMP函数的输出格式类似:
类型 <[长度]>,符号/指数位 [数字1,数字2,数字3,......,数字20]
各位的含义如下:
1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到,见结尾)
2.长度:指存储的字节数
3.符号/指数位
在存储上,Oracle对正数和负数分别进行存储转换:
正数:加1存储(为了避免Null),在实际算法中就是要减1,必须>128
负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要),必须<128
指数位换算:
正数:指数=符号/指数位 - 193 (第一字节)
负数:指数=62 - 第一字节
4.从<数字1>开始是有效的数据位
从<数字1>开始是最高有效位,所存储的数值计算方法为:
将下面计算的结果加起来:
每个<数字位>乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)
===numbe类型例子====
例1:(区别正数和负数)
SQL> select dump(0) from dual;
DUMP(0)
--------------------------------
Typ=2 Len=1: 128
##
例1中可以看见,为什么>128断定为正数,而<128 断定为负数(10进制)
## 16进制分析正数和负数
SQL> select dump(0,16) from dual;
DUMP(0,16)
------------------------------
Typ=2 Len=1: 80--------------------(只有高位)
1 row selected.
DUMP(0) 的结果是0x80,在前面已经提到,0只有高位表示位,没有数据位。由于0的特殊,既不属于正数,也不属于负数,因此使用高位表示位用80表示就足够了, 不会和其它数据冲突,Oracle出于节省空间的考虑将后面数据部分省掉了。但是为什么Oracle选择0x80表示0呢?我们知道正数和负数互为相反 数,每个正数都有一个对应的负数。因此如果我们要使用编码表示数值,则表示正数和负数的编码应该各占一半,这样才能保证使Oracle表示数据范围是合理的。而0x80的二进制编码是1000 0000,正好是一个字节编码最大值的一半,因此,Oracle选择0x80来表示0,是十分有道理的。
@@@@
例2:(正数)
SQL> select dump(1,10) from dual;
DUMP(1,10)
------------------------------------
Typ=2 Len=2: 193,2
| |
高位,数据部分
1 row selected.
##
SQL> select dump(1) from dual;
DUMP(1)
------------------------------------
Typ=2 Len=2: 193,2
1 row selected.
##
例2中可以看见dump(1,10)和dump(1) 输出结果一样:Typ=2 Len=2: 193,2
类型是number,2字节,因为正数所以>128,因为正数所以存储时候都+1
<指数>: 193 - 193 = 0
<数字1> 2 - 1 = 1 *100^(0-0)
= 1
@@@@@@@@
例3:(正数指数变化)
SQL> select dump(99) from dual;
DUMP(99)
----------------------------------------
Typ=2 Len=2: 193,100
1 row selected.
##
SQL> select dump(100) from dual;
DUMP(100)
------------------------------------
Typ=2 Len=2: 194,2
1 row selected.
例3对比就知道,第一字节指数从193变化到194
@@@@@@@@@@@
例4:(负数)
SQL> select dump(-98) from dual;
DUMP(-98)
------------------------------------------
Typ=2 Len=3: 62,3,102
| | |
高位,数据部分,符号位
1 row selected.
<指数> 62 - 62 = 0
<数字1> 101 - 3 = 98 *100^(0-0)
= 98
##
SQL> select dump(-99) from dual;
DUMP(-99)
------------------------------------------
Typ=2 Len=3: 62,2,102
1 row selected.
<指数> 62 - 62 = 0
<数字1> 101 - 2 = 99 *100^(0-0)
= 99
###
SQL> select dump(-100) from dual;
DUMP(-100)
----------------------------------------------
Typ=2 Len=3: 61,100,102
1 row selected
最后加102是目的:
实际存储中-98 为62,3
-99 为62,2
-100为61,100
得知-98>-99>-100
但是如果
SQL> select dump(-98.001) from dual;
DUMP(-98.001)
--------------------------------------------------------
Typ=2 Len=5: 62,3,101,91,102
1 row selected.
通过这个得知 没有102:-98.001为 62,3,101,91 >-98 为62,3
有102:-98.001为 62,3,101,91,102
-98 为 62,3,102
所以加102目的是排序的需要!
例5:(数字位算法)
SQL> select dump(7654321) from dual;
DUMP(7654321)
------------------------------------------------------
Typ=2 Len=5: 196,8,66,44,22
1 row selected.
<指数>: 196 - 193 = 3
<数字1> 8 - 1 = 7 *100^(3-0) 7000000
<数字2> 66 - 1 = 65 *100^(3-1) 650000
<数字3> 44 - 1 = 43 *100^(3-2) 4300
<数字4> 22 - 1 = 21 *100^(3-3) 21
##
SQL> select dump(87654321) from dual;
DUMP(87654321)
--------------------------------------------------------
Typ=2 Len=5: 196,88,66,44,22
1 row selected.
<指数>: 196 - 193 = 3
<数字1> 88 - 1 = 87 *100^(3-0) 87000000
<数字2> 66 - 1 = 65 *100^(3-1) 650000
<数字3> 44 - 1 = 43 *100^(3-2) 4300
<数字4> 22 - 1 = 21 *100^(3-3) 21
×××××××××××××××
类型代码(参考)
代码 数据类型 oracle 版本
1 varchar2 7
2 number 7
8 long 7
12 date 7
23 raw 7
24 long raw 7
69 rowid 7
96 char 7
112 clob 8
113 blob 8
114 bfile 8
180 timestamp 9i
181 timestamp with timezone 9i
182 interval year to month 9i
183 interval day to second 9i
208 urowid 8i
231 timestamp with local timezone 9i
发表评论
-
ORA-01461: can bind a LONG value only for insert into a LONG column
2009-10-30 14:48 4196最近不知道怎么搞得, 好好的信息发布系统时不时的出 ... -
oracle数据类型存储结构
2009-08-02 09:01 2257目标:在oracle服务中确认 ... -
distinct
2009-05-20 15:43 206distinct这个关键字来过滤掉多余的重复记录只保留一条,但 ... -
ORACLE to_char
2009-03-17 13:19 1309ORACLE to_char的用法 ... -
使用PL/SQL Developer导入数据
2008-12-16 23:43 3139使用PL/SQL Developer工具。 在单个文件不大的情 ... -
oracle随系统启动
2008-12-03 23:49 1075from: http://space.itpub.net/15 ... -
oracle语句优化30个规则
2008-12-03 23:19 973from:http://space.itpub.net/219 ... -
数据库优化集锦
2008-12-01 19:14 1324本文首先讨论了基于第 ... -
oracle恢复被drop掉的表
2008-11-26 19:46 1586以前只知道Windows有个回收站,今天听说Oracle也有个 ... -
oracle session
2008-11-26 17:17 18561.如何查看session级的等待事件? 当我们 ... -
oracle字符集
2008-11-25 16:59 1994一、什么是oracle字符集 ... -
oracle临时表空间为何暴涨
2008-11-19 14:38 2056昨天在做测试的时候发现一个非常奇怪的问题:在程 ... -
oracle处理clob数据
2008-11-17 23:58 1370以下方法为 OracleDAOUtil中的方法。 1. 插入记 ... -
oracle10对clob的处理简单化了
2008-11-17 22:51 1753在oracle10g中对于大字段clob的处理简化了,可以像v ... -
sql统计相同项个数并按名次显示
2008-11-17 00:25 6616现在有如下这样一个表: A表 ID Name time --- ... -
oracle 分页sql 语句比较
2008-11-16 18:47 3969说说oracle分页的sql语句,分排序和不排序两种。 当 ... -
oracle 几个常用语句
2008-11-12 20:27 11231、复制表结构 c ... -
解决plsql中文乱码的问题
2008-11-12 19:03 5330xp 系统, plsql 中文显示乱码。 上网查找解决办法。 ... -
oracle10 ora-12154错误的解决办法
2008-11-09 23:05 92149安装好oracle10客户端,配置好网络服务名称,用enter ... -
sql的内联和外联
2008-11-08 14:09 2725假设一堆男女在教堂,有夫妇有单身的,假设男为左表,女为右表 ...
相关推荐
3. DUMP函数:返回字符集、长度、数据类型和字符表示的表达式。 4. EMPTY_CLOB函数:返回一个空的CLOB(Character Large Object)值。 5. EMPTY_BLOB函数:返回一个空的BLOB(Binary Large Object)值。 6. GREATEST...
只有少数几个函数可以处理 NULL 值,例如 CONCAT、DECODE、DUMP、NVL、REPLACE。 NVL 函数 NVL 函数是处理 NULL 值最重要的函数,它可以直接处理 NULL 值。NVL 函数有两个参数:NVL(x1,x2),x1 和 x2 都是表达式,...
然而,有些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`和`REPLACE`在遇到NULL值时会返回非NULL值。`NVL`函数尤其重要,它允许我们处理NULL值。`NVL(x1, x2)`在`x1`为NULL时返回`x2`,否则返回`x1`。例如,当我们试图...
### ORACLE函数及其用法详解 #### 概述 Oracle是一种广泛使用的数据库管理系统,它提供了丰富的内置函数,这些函数能够帮助开发者和数据库管理员更高效地处理数据。本文将详细介绍Oracle中的一些常用函数及其应用...
在Oracle数据库中,函数是一类预定义的子程序,它可以对输入参数执行运算,并返回一个结果值。Oracle提供了一系列的函数,用于处理不同类型的数据,如字符串、数字、日期和时间等。下面按照文档所提供的内容,详细...
2. **DUMP(column_name [,fmt [,start_pos [, length]]])**:返回Oracle内部格式的字符串,用于获取关于列的信息。可以指定格式(如8为八进制,10为十进制,16为十六进制,17为字符)以及开始位置和长度。 3. **...
### Oracle内部函数详解 Oracle数据库提供了丰富的内置函数,这些函数被广泛应用于各种SQL查询和PL/SQL编程场景中,极大地提升了开发效率并简化了复杂计算。根据提供的文档内容,我们将Oracle内部函数分为以下几类...
不过,有一些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`和`REPLACE`在遇到NULL时会有特殊行为。`NVL`函数尤其重要,它可以用来处理NULL值。如`NVL(salary, 0)`会在salary字段值为NULL时返回0,否则返回原值,这在计算...
处理NULL值时,多数函数会返回NULL,除非它们设计有特殊机制应对NULL,如`CONCAT`, `DECODE`, `DUMP`, `NVL`, 和`REPLACE`。 - **NVL()**是最关键的函数之一,用于避免NULL引起的错误。`NVL(x1, x2)`函数检查x1是否...
Oracle PL/SQL函数是数据库操作中不可或缺的一部分,它们提供了丰富的功能,用于处理字符串、数值、日期以及数据类型的转换。以下是对这些函数的详细解释: 1. `ASCII('A')`: 返回字符'A'的ASCII码,即十进制的65。...
2. 版本检测:工具会对比源.dmp文件的版本与目标数据库版本,找出不兼容的特性或函数。 3. 特性转换:根据检测结果,工具会修改.dmp文件中的SQL脚本,去除或替换低版本数据库不支持的特性。 4. 数据格式调整:可能...
### ORACLE函数大全汇总详解 #### 一、概述 Oracle数据库是业界领先的数据库管理系统之一,提供了丰富的内置函数来处理各种数据类型与业务需求。本文档将详细介绍一系列Oracle函数及其应用场景,帮助用户更好地...
然而,有些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`、`REPLACE`可以处理`NULL`参数。特别是`NVL`函数,它允许我们为`NULL`值提供默认值,如`NVL(bonus,0)`,当`bonus`字段为`NULL`时,会用0替代,避免在计算时出现...
然而,有一些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`和`REPLACE`在遇到`NULL`参数时会返回特定值,其中`NVL`尤其重要,因为它可以用来处理`NULL`,如果`x1`是`NULL`,则`NVL(x1, x2)`返回`x2`,否则返回`x1`。...
Oracle数据库中的函数是SQL和PL/SQL编程的重要组成部分,它们帮助开发者处理各种数据类型,包括字符、数字、日期等。本篇文章将详细讲解Oracle中的单行函数和组函数。 单行函数是应用于单行数据记录的函数,它们在...
Oracle数据库函数是一系列预定义的代码单元,这些代码单元执行特定的任务,并且可以被SQL语句或PL/SQL代码块调用。Oracle提供了大量的内置函数,用于实现各种操作,如字符串处理、数学计算、日期时间处理、转换、...
18. **DUMP和EMPTY函数**:DUMP用于获取数据的内部表示,而EMPTY_BLOB和EMPTY_CLOB用于初始化BLOB和CLOB类型的字段。 19. **TO_CHAR、TO_DATE、TO_MULTI_BYTE、TO_NUMBER**:这些函数用于字符串与日期、数字之间的...
2. **DUMP(s, fmt, start, length)**: DUMP函数用于以二进制格式输出变量s的值,fmt是可选的格式参数,start和length则指定要提取的字符位置和长度。这个函数主要用于调试和分析数据,因为它可以显示变量的数据类型...
根据提供的标题和描述,本文将详细介绍在MySQL、SQL Server以及Oracle数据库中常用的函数。这些函数主要分为几大类:字符串处理函数、数值处理函数、日期处理函数、转换函数以及其他一些特殊用途的函数。 ### 字符...