您的当前位置:首页oracle数据类型分析

oracle数据类型分析

2020-11-09 来源:飒榕旅游知识分享网

oracle数据库的数据类型主要是以下三种: 标量 (sclare)、复合(composite)、引用(reference)。 一、标量(char ,number,varchar2,long,clob,blob,nclob,bfile,date) char(num) 定长,最长为2000个字符,运用char的查询效率特高,但是用char的话,不会自动识

oracle数据库的数据类型主要是以下三种:标量 (sclare)、复合(composite)、引用(reference)。

一、标量(char ,number,varchar2,long,clob,blob,nclob,bfile,date)

char(num) 定长,最长为2000个字符,运用char的查询效率特高,但是用char的话,不会自动识别字符长度,定义了多少个字符,它就会占用几个字符,即使存储的字符只有2个,而定义的char为4个字符的话,它会用空格把后两个字符填充。

number 只定义number的话,就表示整形,而如果定义number(7,2)的话,就表示7个有效数字,小数位为两位,例如12345.67这个数字就符合number(7,2)的定义。number的范围是-(10的38次方)到10的38次方。

varchar2(num) 算是varchar的升级版,Oracle对varchar2进行优化过,varchar2与varchar的区别是varchar2把空串等同于null处理,最大长度是4000个字符,varchar2可以节省字符,跟char有个鲜明的区别就是,varchar2会识别存储的字符长度,不会占用多余的空间。但是查询效率没有char高。至于一个varchar2字符要用几个字节存储,要看数据库使用的字符集,比如GBK,汉字就会占两个字节,英文1个,如果是UTF-8,汉字一般占3个字节,英文还是1个。

long 可以用来保存高达2G的数据,作为变量,可以表示一个最大长度为32760字节的可变字符串。

clob 存储单字节字符数据,常用于大文本的存储,可以存放4G的容量。

blob 用于存储无结构的二进制数据,可以存放图片,视频等资源,最大为4G。

nclob 用于存储数据库中的固定宽度单字节或多字节字符的大型数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节。

bfile 当大型二进制对象的大小大于4G字节时,bfile数据类型用于将其存储在数据库外的操作系统文件中;当其大小不足4G字节时,则将其存储在数据库内部的操作系统文件中,bfile列存储文件定位程序,此定位程序指向服务器上的大型二进制文件。

date 时间数据类型,包含年月日时分秒。

二、复合(record,table)

标量类型是经过预定义的,利用这些类型可以衍生出一些复合类型。主要有记录、 表。

记录,可以看作是一组标量的组合结构,它的声明方式如下:

declare

type record_type_name is record(

参数1 参数类型

参数2 参数类型

......);

其中,record_type_name是记录类型的名字。

例子:

declare

--声明一个record类型的记录myrecord

type myrecord is record(

--定义参数

id varchar2(10);

name varchar2(10));

--声明一个myrecord类型的变量real_record

real_record myrecord;

begin

--将所取数据存放在real_record中

select eid,ename into real_record from emp where eid='001';

--通过real_record.变量的方式输出

dbms_output.put_line(real_record.id||','||real_record.name);

end;

表,不是物理存储数据的表,在这里是一种变量类型,也称为PL/SQL表,它 类似于C语言中的数组,在处理方式上也相似。它的声明方式如下:

declare

type table_type_name is table of scalar_type index by binary_integer;

其中,table_type_name是类型的名字,scalar_type 是一种标量类型的类型声明,index by binary_integer指明下标为整数。引用时也必须定义相关的变量。表和数组不同,表有两列,key和value,key就是定义时声明的binary_integer,value就是定义时声明的scalar_type。

例子:

declare

--声明一个table类型的表sp_table_type
type sp_table_type is table of student.id%type index by binary_integer;

--声明一个sp_table_type类型的变量sp_table
sp_table sp_table_type;
begin

--将查询到的数据保存在sp_table(0)中
select id into sp_table(0) from student where id=4;
dbms_output.put_line(sp_table(0));
end;

三、引用

在PL/SQL8.0之前,只有一种类型--REF CURSOR,也就是游标。它的定义较为简单,

declare

type cursor_type_name is ref cursor;

在PL/SQL8.0之后,引入了REF类型,它指向一个对象。

例子:

declare

--声明一个cursor类型的游标sp_emp_cursor

type sp_emp_cursor is ref cursor;

--声明一个sp_emp_cursor类型的变量test_cursor

test_cursor sp_emp_cursor;

--声明两个%type类型的变量

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

--打开游标

open test_cursor for select ename,sal from emp where depart=&no;

loop

--提取游标

fetch test_cursor into v_ename,v_sal;

exit when test_cursor%notfound;

dbms_output.put_line(v_ename||' '||v_sal);

end loop;

--关闭游标

close test_cursor;

end;

显示全文