数据类型
1.常用数据类型
(1)CHAR(N)=CHAR(N BYTE)定义固定长度的字符串(以字节为单位),最大长度2000字节,如果没有指定N,其默认值为1.假设column1列定义为char(100),那么该列最多可以存储100个字节的字符串,并且占用空间固定。
(2)CHAR(N CHAR)
定义固定长度的字符串(以字符个数为单位)。假设column1列定义为char(100 char),那么该列最多可以存储100个字符(单字节或多字节)。如果存放的全部是汉字,则占用空间最多为200个字节;
如果存放的全部是英文字符,则占用空间最多为100个字节。
(3)VARCHAR2(N)=VARCHAR2(N BYTE)
定义变长字符串(以字节为单位),其最大长度为4000字节,N必须指定长度。假设column1列定义为varchar2(100),则该列最多可以存储长度为100个字节的字符串,并且占用空间是变化的。
(4)VARCHAR2(N CHAR)
定义可变长字符串(以字符个数为单位)。假设column1列定义为varchar2(100 char),那么该列最多可以存储100个字符(单字节或多字节)。如果存放的全部是汉字,则占用空间最多为200个字节;
如果存放的全部是英文字符,则占用空间最多为100个字节。
(5)NUMBER(P,S)
定义数字类型的数据,P表示数字的总位数(最大字节个数),而S表示小数点后面的位数。假设column1列定义为NUMBER(6,2),则整数最大位数为4位,而小数最大位数为2位。
(6)INT
定义整数类型数字,是NUMBER的子类型。
(7)DATE
定义日期时间数据,长度为7个字节。默认显示格式为(DD-MON-YY)。
(8)TIMESTAMP
定义日期和时间数据,是DATE数据类型的扩展。默认显示格式为(DD-MON-YY HH.MI.SS AM)。
(9)RAW(N)
定义二进制数据,N的上限值为2000。
(10)LONG、LONG RAW
早期Oracle版本(6和7)中,存储大量字符数据类型(LONG)、存储大量二进制数据类型(LONG RAW),最大长度2G,数据存放在表段中,SELECT直接返回数据,列数据顺序访问。
(11)CLOB、BLOB
Oracle8版本开始,存储大量字符数据类型(CLOB)、存储大量二级制数据类型(BLOB),最大长度4G,数据小于4000字节时,存放在表段中,大于4000字节时存放到LOB段,SELECT返回定位符,列数据可以随机访问。
(12)BINARY_FLOAT、BINARY_DOUBLE
Oracle10g新增加的数据类型,分别用于定义单精度浮点数和双精度浮点数,并且这两种数据类型主要用于高速的科学计算。定义BINARY_FLOAT需要带有后缀f(如:1.5f),定义BINARY_DOUBLE需要带有后缀d(如:3.00095d)。
2.PL/SQL定义变量
2.1 语法
identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]* identifier:变量或常量的名称。
* CONSTANT:用于指定常量。
* datatype:用于指定变量或常量的数据类型。
* NOT NULL:用于强制初始化变量(不能为NULL)。当指定NOT NULL 选项时,必须为变量提供数值。
* :=:用于为变量和常量指定初始值。
* DEFAULT:用于为变量和常量指定初始值。
* expr:指定初始值的PL/SQL表达式,可以是文本值、其他变量、函数等。
2.2 使用示例
v_ename VARCHAR2(10);v_sal NUMBER(6,2);
v_balance BINARY_FLOAT;
c_tax_rate CONSTANT NUMBER(3,2):=5.5;
v_hiredate DATE;
v_valid BOOLEAN NOT NULL DEFAULT FALSE;
注意:如果在定义变量时没有指定初始值,那么变量初始为NULL.
2.3 %TYPE属性
该属性用于按照数据库列或其他变量定义变量。如:v_ename emp.ename%TYPE; v_tax_ename v_ename%TYPE;
3.PL/SQL复合变量
复合变量是指用于存放多个值得变量。包括:PL/SQL记录表、PL/SQL表、嵌套表以及VARRAY等四种复合数据类型(Composite);3.1 PL/SQL记录
类似高级语言中的结构,用于处理单行多列数据。既可以自定义记录类型和记录变量,也可以使用%ROWTYPE属性直接定义记录变量。3.1.1 语法
TYPE type_name IS RECORD(field_declaration[,field_declaration,...]
);
identifier type_name;
其中:type_name用于指定自定义记录类型的名称。
3.1.2 使用示例
(1)自定义PL/SQL记录类型和记录变量
(2)使用%ROWTYPE属性定义记录变量
%ROWTYPE属性可以基于表或视图定义记录变量。
3.2 PL/SQL表
也称为索引表,类似于高级语言中的一维数组,用于处理多行单列数据。PL/SQL表的元素个数没有限制,而且下标可以为负值。3.2.1 语法
TYPE type_name IS TABLE OF element_type[NOT NULL] INDEX OF BINARY_INTEGER;
identifier type_name;
3.2.2 使用示例
(1)使用PL/SQL表处理单行单列数据
(2)使用PL/SQL表处理单列多行数据
从Oracle9i开始,通过使用SELECT BULK COLLECT INTO 语句,将多行数据检索到PL/SQL表变量。从下标1开始计数,通过使用COUNT方法获取元素的总个数。
3.3 PL/SQL记录表
类似高级语言的多维数组,可以处理多行多列的数据。3.3.1 语法
TYPE type_name IS TABLE OF record_type[NOT NULL] INDEX OF BINARY_INTEGER;
identifier type_name;
其中:record_type可以是自定义的PL/SQL记录,也可以是%ROWTYPE定义的行类型。
3.3.2 使用示例
(1)使用自定义PL/SQL记录定义记录表
(2)使用%ROWTYPE属性定义记录表