Oracle--plsql复合数据类型


•复合组合变量也叫做组合变量,在复合变量中包括多个内部组件,每个组件都可以单独存放值,
  因此一个复合变量可以存放多个值。 
•复合变量类型不是数据库中已经存在的数据类型,因此复合变量在声明类型之前,首先要先创建复合类型,

   复合类型创建后可以多次使用,以便定义多个复合变量。

复合数据类型包括:  

-记录

-表

-嵌套表

-数组

 记录是由一组相关的数据项组成的逻辑单元,每一个数据项都有自己的名字和数据类型。
 
 表是数据的集合,可将表中的数据作为一个整体进行引用和处理。
 
 表由列和关键字组成,其中通过关键字可成组地访问行。
 
 一经定义,记录和表都可重复使用。
 

PL/SQL 记录

•记录是存储在多个字段中的一组相关的数据项,每个字段都有自己的名字和数据类型。 
•把字段的集合当作一个整体的逻辑单元 
•主要用于从表中取出查询到的行数据

记录的特点: 

•  每个记录内都可以有许多字段。 
•  可以为记录赋初值,同时可用NOT NULL来限定记录 
•  无初始值的字段定义为NULL •  在定义字段时也可以使用保留字DEFAULT 
•  可以在任意一个块、子程序或包的声明部分定义RECORD类型并声明用户自定义的记录 
•  可以声明并引用嵌套的记录,一个记录可以是其他记录的组件

语法:

TYPE type_name IS RECORD (field_declaration[, field_declaration]…);


其中field_declaration:

field_name {field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE} [[NOT NULL] {:= | DEFAULT} expr]
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 之前加上数据库表名 
•记录内字段的名字和数据类型参照表或视图中的列 

DECLARE emp_record emp%rowtype; …. emp_record.ename=‘ljs’; emp_record.sal=3000; SELECT * INTO emp_record FROM emp WHERE ……;
%ROWTYPE的优点:  

•可以不必知道数据库中列的数量和类型。
•在运行期间,数据库中列的数量和类型可能发生变化。 
•在SELECT语句中使用该属性可以有效地检索表中的行
                                                  


创建 PL/SQL

TYPE type_name IS TABLE OF {column_type | variable%TYPE | table.column%TYPE} [NOT NULL] [INDEX BY BINARY_INTEGER]; identifier type_name;
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;

表方法:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值