Oracle--plsql复合数据类型

2014-11-24 09:43:22 · 作者: · 浏览: 0

复合组合变量也叫做组合变量,在复合变量中包括多个内部组件,每个组件都可以单独存放值,
因此一个复合变量可以存放多个值。

复合变量类型不是 数据库中已经存在的数据类型,因此复合变量在声明类型之前,首先要先创建复合类型,
复合类型创建后可以多次使用,以便定义多个复合变量。
复合数据类型包括:
-记录
-表
-嵌套表
-数组
记录是由一组相关的数据项组成的逻辑单元,每一个数据项都有自己的名字和数据类型。
表是数据的集合,可将表中的数据作为一个整体进行引用和处理。
表由列和关键字组成,其中通过关键字可成组地访问行。
一经定义,记录和表都可重复使用。
PL/SQL 记录
记录是存储在多个字段中的一组相关的数据项,每个字段都有自己的名字和数据类型。
把字段的集合当作一个整体的逻辑单元
主要用于从表中取出查询到的行数据
记录的特点:
每个记录内都可以有许多字段。
可以为记录赋初值,同时可用NOT NULL来限定记录
无初始值的字段定义为NULL 在定义字段时也可以使用保留字DEFAULT
可以在任意一个块、子程序或包的声明部分定义RECORD类型并声明用户自定义的记录
可以声明并引用嵌套的记录,一个记录可以是其他记录的 组件
语法:
[plain]
TYPE type_name IS RECORD
(field_declaration[, field_declaration]…);
其中field_declaration:
[plain]
field_name {field_type | variable%TYPE
| table.column%TYPE | table%ROWTYPE}
[[NOT NULL] {:= | DEFAULT} expr]
[plain]
TYPE emp_record_type IS RECORD
(empno emp.empno%type,
ename emp.ename%type,
job varchar2(9));
emp_record emp_record_type ;
赋值可以使用点号引用记录中的字段
record_name.field_name
%ROWTYPE 属性
声明的变量对应于数据库表或视图中列的集合
在%ROWTYPE 之前加上数据库表名
记录内字段的名字和数据类型参照表或视图中的列
[plain]
DECLARE
emp_record emp%rowtype;
….
emp_record.ename=‘ljs’;
emp_record.sal=3000;
SELECT * INTO emp_record
FROM emp
WHERE ……;
%ROWTYPE的优点:
可以不必知道数据库中列的数量和类型。
在运行期间,数据库中列的数量和类型可能发生变化。
在SELECT语句中使用该属性可以有效地检索表中的行
创建 PL/SQL 表
[plain]
TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
[INDEX BY BINARY_INTEGER];
identifier type_name;
[plain]
DECLARE
TYPE ename_table_type IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE hiredate_table_type IS TABLE OF DATE
INDEX BY BINARY_INTEGER;
ename_table ename_table_type;
hiredate_table hiredate_table_type;
BEGIN
ename_table(1) := 'CAMERON';
hiredate_table(8) := SYSDATE + 7;
IF ename_table.EXISTS(1) THEN
INSERT INTO ...
...
END;
表方法:

作者 shaojie519