oracle internal number 数据类型存储
转自:http://ilonng.blog.sohu.com/130335741.html
oracle的number类型是一种软件数据类型,在oracle软件本身中实现,我们不能使用固有硬件操作将两个number类型相加,这要在软件中模拟,number 类型的内部编码是2。oracle存储一个数的时,会存储尽可能少的内容来表示这个数,为此它会存储有效数字、用于指定小数点位置的一个指数,以及有关数值符号的信息(正或者负)。因此,数中包含的有效数字越多,占用的存储空间就越大。
oracle底层存储number类型采用下面的这种形式:
sign bit/exponent,digit1,digit2,…,digit20
sign bit/exponent为标志位,digit1...digit20为数值位,可见number最多占据21个字节。
一个数是可以使用科学计算法来正确表示的,如10=1*power(10,1),-101=-1.01*power(10,2),0.2=2*power(10,-1)。oracle就是通过这个原理来存储数据,它将任何一个它可以表示的数据转换成一个符号位、一个指数、一个有效数来存储,举个例子,123在oracle中是这样来存储的,+(1.23*power(100,1)),即它是以100为科学计算法的指数基数,为什么这样以及怎么来存储,请看下面。
存储数据的第一个字节是标志位,这个字节里面会反映出这个数字的符号位以及表示这个数字的指数的符号位。采用科学计数法,任何一个实数S都可以描述为A.B×power(100,N),A表示整数部分(可能是正数,可能是负数),B表示小数部分,而N表示10的指数部分。那么oracle怎么用一个字节来表示这些信息呢?
1、拿这个字节的最高位来表示正负,0表示负数,1表示正数。由此可见,这个数字在128这个部分被一切为2份,如果这个数字大于128,那么这个数就是正数,如果这个数字小于128,那么这个数字就是负数,如果这个数字等于128,那么这个数字就是0,如:
15:16:24 WATER@ lake>select 1,dump(1) from dual;
1 DUMP(1)
---------- ------------------
1 Typ=2 Len=2: 193,2
这里的第一个字节的标志位是193,大于128,故其为正数,另外可以看到,这里还有个偏移量为65,193=128+65+0。
15:16:30 WATER@ lake>select -1,dump(-1) from dual;
-1 DUMP(-1)
---------- -----------------------
&
相关文档:
[oracle@dba01 dbs]$ orapwd file=/oracle/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=oracle entries=20 force=y
[oracle@dba01 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sat May 29 13:07:10 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Con ......
/*主要是为了看清连接逻辑,所以把异常Exception*/
import java.sql.*;
public class TestJDBC {
public static void main(String[] args) throws Exception {
ResultSet rs = null;
Statement stmt = null;
......
批处理(bat文件) 自动启动/关闭oracle服务
判断oracle 服务状态
如果服务处于启动状态,就关闭服务;
如果服务处于关闭状态,就启动服务。
@ECHO OFF
for /f "skip=3 tokens=4" %%i in ('sc query OracleServiceORCL') do set "zt=%%i" &goto :next
:next
if /i "%zt%"=="RUNNING" (
ECHO Stoping Oracle ......