Heim >Datenbank >MySQL-Tutorial >oracle数据类型分析

oracle数据类型分析

WBOY
WBOYOriginal
2016-06-07 15:19:101217Durchsuche

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;

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn