Oracle中Binary_Integer和Pls_Integer 的区分

Binary_Integer

Pls_Integer 都是整型类型.
Binary_Integer类型变量值计算是出于Oracle来实施,不会见现出溢起,但是执行进度比较缓慢,因为它们是出于Oracle模拟执行。而Pls_Integer的执行是由硬件即直接由CPU来运算,因而会油然而生溢起,但那实行进度比较前者快多。

一、概述

  在ORACLE8中定义了:标量(SCALAR)、复合(COMPOSITE)、引用(REFERENCE)和LOB四栽多少类,下面详细介绍其的风味。

  二、标量(SCALAR)

  合法的标量类型和数据库的列所使用的类别相同,此外她还有局部扩展。它又分为七个组:数字、字符、行、日期、行标识、布尔及可信。

  数字,它来三种植基本类型–NUMBER、PLS_INTEGER和BINARY_INTENER。NUMBER可以描述整数或实数,而PLS_INTEGER和BINARY_INTENER只能描述整数。

  NUMBER,是以十上前制格式进行仓储的,它有利于存储,但是以测算上,系统会活动的以它换成为二进制进行演算的。它的概念方式是NUMBER(P,S),P是精度,最深38各类,S是刻度范围,可在-84…127内部取值。例如:NUMBER(5,2)可以据此来囤表示-999.99…999.99内的数值。P、S可以以概念是粗略,例如:NUMBER(5)、NUMBER等;

  BINARY_INTENER用来描述不存储在数据库中,但是要因此来测算的带符号的整数值。它以2的补码二进制形式发表。循环计数器经常应用这种类型。

  PLS_INTEGER和BINARY_INTENER唯一区别是以测算中有溢起时,BINARY_INTENER型的变量会叫电动指派给一个NUMBER型而未见面错,PLS_INTEGER型的变量将见面来错误。

  字符,包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR和NVARCHAR2几栽类型。

  CHAR,描述定长的字符串,如果实在价值不足够定义的长短,系统将为空格填充。它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最老32767独字符,作为数据存储于ORACLE8中最深也2000。

  VARCHAR2(VARCHAR),描述变长字符串。它的扬言方式如下VARCHAR2(L),L为字符串长度,没有亏省值,作为变量最深32767独字节,作为数据存储于ORACLE8中最酷也4000。在多字节语言环境被,实际存储的字符个数可能低于L值,例如:当语言环境为中文(SIMPLIFIED
CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保留200独英文字符或100独汉字字符。

  LONG,在数据库存储着可据此来保存高及2G底数目,作为变量,可以表示一个顶老尺寸也32760字节的可转换字符串。

  NCHAR、NVARCHAR2,国家字符集,与环境变量NLS指定的语言集密切相关,使用方式以及CHAR、VARCHAR2相同。

  行,包括RAW和LONG RAW两栽类型。用来囤积二前行制数据,不会见在字符集间转移。

  RAW,类似于CHAR,声明方式RAW(L),L为长,以字节为单位,作为数据库列最可怜2000,作为变量最老32767字节。

  LONG RAW,类似于LONG,作为数据库列最酷存储2G字节的数码,作为变量最特别32760字节。

  日期,只发生雷同种植档次–DATE,用来存储时信息,站用7单字节(从世纪至秒),绝对没有“千年虫”问题。

  行标识,只生平等栽类型–ROWID,用来囤“行标识符”,可以下ROWIDTOCHAR函数来拿尽标识转换成字符。

  布尔,只发生同样种植类型–BOOLEAN,仅仅可以象征TRUE、FALSE或者NULL。

  可信,只出一致种类型–MLSLABEL,可以在TRUSTED
ORACLE中因故来保存可转移长的亚迈入制标签。在标准ORACLE中,只能存储NULL值。

三、复合(COMPOSITE)

  标量类型是由此预定义的,利用这些类别可以衍生出一部分复合类型。主要出记录、表。

  记录,可以当是千篇一律组标量的组合结构,它的声明方式如下:

  TYPE
record_type_name IS RECORD

  (
filed1 type1 [NOT NULL] [:=expr1]

  …….

  filedn
typen [NOT NULL] [:=exprn] )

  其中,record_type_name是记录类型的讳。(是匪是圈在象CREATE
TABLE?……)引用时必须定义相关的变量,记录但是TYPE,不是VARIABLE。

  表,不是物理存储数据的阐明,在此是同等种植变量类型,也叫做PL/SQL表,它相仿于C语言中之再三组,在处理方式上吧诚如。它的宣示方式如下:

  TYPE
table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;

  其中,table_type_name是种类的名,scalar_type是相同种植标量类型的类别声明。引用时也亟须定义相关的变量。表及数组不同,表有少数排列,KEY和VALUE,KEY就是概念时宣称的BINARY_INTENER,VALUE就是概念时声称的scalar_type。

  除了记录及发明外,还有对象类型、集合(嵌套表及VARRAYS)等类,这些用特别教。

  四、引用(REFERENCE)

  在PL/SQL8.0前,只来相同种档次–REF
CURSOR,也便是游标。它的定义较为简单,

  CURSOR
cursor_name IS select …..from…..;

  于PL/SQL8.0下,引入了REF类型,它对一个靶。这种类型将独自教。(等自己做明白再说,免得在高人面前……)

五、LOB型

  LOB变量主要是为此来储存大量数的数据库字段,最充分可储存4G字节的情节(这么大,存VCD?,浪费!)。主要有:

  CLOB:和ORACLE7中的LONG类型相似,存储单字节字符数量。(别用来存中文喔。。。)

  NCLOB:用来存储定宽多字节字符数量。(例如:存《啸傲江湖》就那个好)

  BLOB:和LONG RAW相似,用来存储无组织的二进制数据。

  BFILE:它之所以来允许ORACLE对数据库外存储的重型二进制文本进行单独念形式之造访。

  六、其他

  其实在得对标量变量的喻之后,基本上可以应付C/S模式下的正常数据库应用所需要了,后续之类别说实话,我耍了5年ORACLE,都深少用到。

相关文章