标量数据类型:

a.存储单一的值 b.没有内部结构

基本标量数据类型:

char,varchar2,long,long raw,number,binary_integer,pls_integer,boolean,date,timestamp

 

一、oracle数据类型

1.字符数据类型:char,varchar2,long

(1)当需要固定长度的字符串时,使用char数据类型

char数据类型存储字母数字值

char数据类型的列长度可以是1~2000个字节

(2)varchar2数据类型支持可变长度字符串(用多少分配多少)

varchar2数据类型存储字母数字值

varchar2数据类型的大小在1~4000字节范围内

(3)long数据类型存储可变长度字符数据

long数据类型最多能存储2GB

2.数值数据类型:

(1)说明:可以存储整数、浮点数和实数

最高精度为38位

(2)声明语法:

number[(p[,s])]

p表示精度,s表示小数点的位数

3.日期时间数据类型:

(1)说明:存储日期和时间值,包括年、月、日,

小时、分钟、秒

(2)主要的日期时间类型有:

date--存储日期和时间部分,精确到整个的秒

timestamp--存储日期、时间 和时区信息,秒值精确到小数点后6位

4.raw和long raw:

(1)raw数据类型用于存储二进制数据

(2)raw数据类型最多能存储2000字节

(3)long raw数据类型用于存储可变长度的二进制数据

(4)long raw数据类型最多能存储2GB

5.LOB类型:

(1)概述:

LOB称为“大对象”数据类型,可以存储多达4GB的非结构化信息,例如声音剪辑

和视频文件等。

LOB数据类型允许对数据进行高效、随机、分段的访问。

(2)LOB包括:CLOB(Character LOB,字符LOB,能够存储大量字符数据),

BLOB(Binary LOB,二进制LOB,可以存储较大的二进制对象,如图形、视频剪辑和声音文件),

BFILE(Binary File,二进制文件,用于将二进制数据存储在数据库外部的操作系统文件中)

 

二、PL/SQL支持的内置数据类型

标量类型(数字,字符,布尔型,日期时间)

LOB类型(存储非结构化数据块,CLOB,BLOB,BFILE,NCLOB)

属性类型(提供某个变量或数据库表列的数据类型 %TYPE

提供表示表中一行的记录类型 %ROWTYPE)

1.数字数据类型:指定数值的存储格式

BINARY_INTEGER:存储有符号整数,所需存储空间少于NUMBER类型值(不会溢出)

NUMBER:存储整数、实数和浮点数,可以用(DECIMAL,FLOAT,INTEGER,REAL)

PLS_INTEGER:存储有符号整数,可使算术计算快速而有效(会有溢出)

2.字符数据类型

CHAR,VARCHAR2,LONG,RAW,LONG RAW

SQL数据类型与PL/SQL数据类型的比较:

数据类型

SQL类型

PL/SQL类型

CHAR

1..2000

1..32767

LONG

1..2GB

1..32760

LONG RAW

1..2GB

1..32760

RAW

1..2000

1..32767

VARCHAR2

1..4000

1..32767

3.日期时间类型

(1)存储日期和时间数据

(2)常用的两种日期时间类型:DATE,TIMESTAMP

4.布尔数据类型

(1)此类别只有一种类型,即BOOLEAN类型,用于存储逻辑值(TRUE、FALSE和NULL)

(2)不能向数据库中插入BOOLEAN数据,不能拿将列值保存到BOOLEAN变量中,只能对BOOLEAN变量执行逻辑操作

5.LOB数据类型

(1)用于存储大文本、图像、视频剪辑和声音剪辑等非结构化数据

(2)LOB数据类型可存储最大4GB的数据

(3)LOB类型包括:

BLOB 将大型二进制对象存储在数据库中

CLOB 将大型字符数据存储在数据库中

NCLOB 存储大型UNICODE字符数据

BFILE 将大型二进制对象存储在操作系统文件中

(4)LOB类型的数据库列j仅存储定位符,该定位符指向大型对象的存储位置

(5)DBMS_LOB程序包用于操纵LOB数据

读取LOB数据举例:(在sqlplus下运行)

spool e:\PLSQL.txt

create table my_book_text
(book_id number(3),
book_descr varchar2(40),
book_text clob);

insert into my_book_text
values(3,'第三部分PL/SQL高级编程','PL/SQL可用于创建存储过程、触发器和程序包等,用来处理业务规则、数据库事件或给SQL 命令的执行添加程序逻辑');

set serveroutput on;--设置打印输出

--使用dbms_lob程序包读取clob数据类型
declare
clob_var clob;
amount integer;
offset integer;
output_var varchar2(100);--读取出来的位置存放的变量
begin
select book_text into clob_var from my_book_text
where book_id=3;
amount:=24;--需要打印的字符长度
offset:=1;--读取的字符起始位置
dbms_lob.read(clob_var,amount,offset,output_var);
dbms_output.put_line(output_var);--输出需要读取的值
end;

6.属性类型

(1)用于引用数据库列的数据类型,以及表示表中一行的记录类型

(2)属性类型有两种:

%TYPE-引用变量和数据库列的数据类型  myId student.sid%type(定义变量myId,类型与student表的sid一样)

%ROWTYPE-提供表示表中一行的记录类型  emp_rec scott.emp%rowtype(定义记录变量emp_rec,类型与scott用户下的emp表的行类型一致,用于记录emp表中的一行数据)

(3)使用属性类型的优点:

不需要知道被引用的表列的具体类型;

如果被引用对象的数据类型发生改变,PL/SQL变量的数据类型也随之改变