oracle变量(2)

来源:互联网 发布:淘宝网云裳广场舞服装 编辑:程序博客网 时间:2024/05/20 13:10

1.NUMBER

NUMBER类型既可以表示整数,也可以表示浮点数,格式如下:

NUMBER [ (precision , scale) ]

精度:所允许数值的总长度,也就是数值中所有数字位的个数,最大值为38.

刻度:刻度用来确定小数位数,同时也确定在什么地方进行舍入。当刻度是正数时,刻度范围是小数点右边的数字位个数。

当刻度是负数时,刻度范围是小数点左边的数字位个数,从该位开始舍入。

如果不指定精度和刻度,则默认为最大精度,即38位。

DECLARE   num1  NUMBER:=3.1415926;           --没有精度,默认为38位;结果:3.1415926  num2  number(3) :=3.1415926;       --精度3,刻度0.   结果:3.142 -- num3  number(3) :=3141.5926;     --错误,数字精度大于3。  num4  number(4,3) :=3.1415926;     --刻度3,保留小数点后3位,舍入 。num4:=3.142   -- num5  number(4,3) :=3141.5926;   --错误,数字精度大于3。  num6  number(8,3) :=31415.9267;    --num6:=31415.927  num7  number(4,-3):=31415.9267;    --刻度是-3,舍去小数点左边的前3位。num7:=31000 -- num8  number(4,-3):=12345678.901;  --错误,数字精度大于4-(-3)。  num9  number(4,-3):=314.159267;    --结果为0.因为刻度是3,舍去小数点左边3位。 num9:=0 -- num0  number(4,-1):=123456;      --错误,数字精度大于4-(-1);BEGIN  DBMS_OUTPUT.put_line('num1:=' || num1);  DBMS_OUTPUT.put_line('num2:=' || num2);  DBMS_OUTPUT.put_line('num4:=' || num4);  DBMS_OUTPUT.put_line('num6:=' || num6);  DBMS_OUTPUT.put_line('num7:=' || num7);  DBMS_OUTPUT.put_line('num9:=' || num9);END;

2、LOB对象类型

LOB类型又称为大型对象类型,包含了BLOB,CLOB和NCLOB(内部存储)和BFILE(外部存储),它可以存储大的和没有结构的数据。例如文本、图像、视频和空间数据,大小能达到4GB。

LOB对象通过定位器来操作数据,因此在LOB类型中一般会包含一个定位器,定位器用于指向LOB数据。比如当使用查询语句选择一个BLOB类型的列时,将只有定位器被返回。


3、自定义子类型

自定义子类型,就是在标准类型的基础上进行进一步约束而创建的新类型。但实际上,子类型只是基类型的候选名称,不是一个新类型。

子类型的定义语法如下:

SUBTYPE  subtype_name   IS  base_type[ (constraint) ]  [ not null ]

【SUBTYPE】:用来指定当前声明一个子类型

【subtyep_name】:子类型名称

【IS】:指定子类型将要使用的基类型

【base_type】:指定子类型的基类,可以是任何标量类型或用户定义的类型。

【constraint】:约束知识用于限定基类型的精度和数值范围,或者最大长度。

【NOT NULL】:非空。

DECLARE  SUBTYPE empcounttype IS INTEGER;    --定义子类型  empcount empcounttype;              --声明子类型变量    --定义表类型  TYPE empnamelist IS TABLE OF VARCHAR2 (20);      SUBTYPE namelist IS empnamelist;      --定义表类型的子类型。    --定义数组类型  TYPE T_arr IS VARRAY(20) OF VARCHAR2(20);  SUBTYPE arr IS T_arr;              --定义数组子类型  lsit arr;    --定义记录类型  TYPE empinfo IS RECORD(       empid number(4),       empname varchar(20)  );  SUBTYPE emprecord IS empinfo;      --定义记录类型的子类型  T_emp emprecord;    SUBTYPE empno IS emp.empid%TYPE;   --定义%TYPE 子类型  SUBTYPE emprow IS emp%ROWTYPE;     --定义%ROWTYPE 子类型 BEGIN  NULL;END;







0 0
原创粉丝点击