22.6 使用%TYPE和%ROWTYPE类型的变量
在定义变量时,除了可以使用Oracle规定的数据类型外,还可以使用%TYPE和%ROWTYPE来定义变量。
%TYPE类型的变量是专门为存储从数据列中检索到的值而创建的。对于使用%TYPE创建的变量,其数据类型由系统根据检索的数据列的数据类型决定。
而对于%ROWTYPE类型的变量而言,它可以一次存储从数据库检索的一行数据。
22.6.1 %TYPE变量
如果用户事先不知道检索的数据列的数据类型时,就可以考虑使用%TYPE来定义变量。
当使用%TYPE定义变量时,其数据类型为指定的列的数据类型。请看下面的示例:
SQL> declare
2 empno emp.empno%TYPE; //声明的时候一定要加上表的中列
3 ename emp.ename%TYPE;
4 job emp.job%TYPE;
5 begin
6 select empno,ename,job into empno,ename,job from emp where empno='7369';
7 dbms_output.put_line(empno||'/'||ename||'/'||job);
8 end;
9 /
7369/SMITH/CLERK
在上面的程序中,对于emp.empno%TYPE来说,首先系统会从emp表中去查找empno列,再然后%TYPE返回其数据类型。
%TYPE的好处:
1、可移植性高(当我们对表的数据类型发生改变时,用户不必考虑定义变量类型)。
2、 用户不必查看数据类型就可以定义变量能够存储检索的数据。
22.6.2 %ROWTYPE变量
与%TYPE类型相似,也可以在不确定查询列的数据类型的情况下,使用%ROWTYPE类型的变量存储查询的数值,只不过%ROWTYE一次可以存储一行数据。例如,下面的示例使用%ROWTYPE类型的变量存储查询的数据。
SQL> declare
2 row_data emp%ROWTYPE;
3 begin
4 select * into row_data from emp where empno='7369';
5 dbms_output.put_line(row_data.empno||'/'||row_data.ename||'/'||row_data.job);
6 end;
7 /
在上面的程序中,定义了一个%ROWTYPE类型的变量,该变过量的结构与“emp”表的结构完全相同。因此,可以将检索的一整行数据保存到该变量中,并且根据表中列的名称引用对应的数值。
注意:如果定义了%rowtype类型的变量,由于该变量的结构与定义表的结构完全相同,所以查询时必须使用 * 或者列举表的全部字段信息。
22.7 复合变量
复合变量可以将不同的数据类型的多个值存储在一个单元中。由于复合数据类型可以有用户根据需要定义其结构,所以复合数据类型也称为自定义数据类型。
PL/SQL提供了两种类型的复合数据类型:
22.7.1 记录类型
记录类型与数据库中的行结构非常相似,使用记录类型定义的变量可以存储由多个列组成的一行数据。
当使用记录类型的变量时,首先需要定义记录的结构,然后设定记录类型的变量,这与定义变量和%TYPE、%ROWTYPE类型的变量不同。
使用TYPE语句定义记录类型的语法形式如下:
TYPE record_name is record(
Field_name data_type [not null] [:=default value]
…
);
其中,record_name为自定义的记录类型的名称,field_name为记录类型中的字段名,data_type为该字段的数据类型。记录与%Rowtype不同之处是:
1、%rowtype查询的是全部数据
2、记录类型必须使用type语法格式声明
//案例
SQL> declare
2 type empinfo is record( //声明一个记录类型
3 empno number(4),
4 ename varchar2(10),
5 job varchar2(9)
6 );
7
8 emp_data empinfo; //声明一个记录类型的变量
9 begin
10 select empno,ename,job into emp_data from emp where empno=7369; //查询的结果赋值给定义的变量
11 dbms_output.put_line(emp_data.empno||'/'||emp_data.ename||'/'||emp_data.job);
12 end;
13 /
22.7.2 记录表类型
记录表允许用户在程序代码中使用“表”,以便存储多个行的数据。它只在程序运行期间有效,类似于程序代码中的集合(数组)。
为什么使用记录表类型呢?因为我们查询的数据往往需要返回多行记录,所以需要记录表类型。
定义记录表类型的语法形式:
TYPE table_name is table of data_type[not null]
Index by binary_integer;
由于记录表类型不会存储在数据库中,所以data_type可以是任何合法的PL/SQL数据类型。关键字INDEX_BY BINARY_INTEGER指示系统创建一个主键索引,以引用记录表变量中的特定行。在下面的示例中,创建了两种不同的记录表数据类型:
declare
type table_emp is table of emp%rowtype //创建一个表,此表的类型与emp表的类型一致
index by binary_integer;
type table_text is table of varchar2(20) //创建一个表 此表具有一个varchar2列的简单表
index by binary_integer;
empt table_emp; //声明记录表类型的变量
tabtext table_text;
begin
null
end;
案例:
SQL> declare
2 type table_emp is table of emp%rowtype
3 index by binary_integer;
4 empt table_emp;
5 begin
6 empt(1).ename:='wangyi';
7 dbms_output.put_line(empt(1).ename);
8 end;
9 /
//返回总记录
SQL> declare
2 type table_emp is table of emp%rowtype
3 index by binary_integer;
4 empt table_emp;
5 begin
6 dbms_output.put_line(empt.count);
7 end;
8 /
0 //没有记录
删除记录表变量中的记录
表名.Delete(记录数);
检索记录变量
First:获取第一个的索引
Next:下一个的索引 但是必须有参数
Last:最后一个的索引
SQL> declare
2 type table_emp is table of emp%rowtype
3 index by binary_integer;
4 empt table_emp;
5 i number(2):=1;
6 begin
7 while i<10
8 loop
9 empt(i).ename:='wangyi';
10 i:=i+1;
11 end loop;
12
13 dbms_output.put_line(empt.count);
14
15 empt.delete(2);
16
17 dbms_output.put_line(empt.count);
18
19 dbms_output.put_line(empt.first);
20 dbms_output.put_line(empt.next(2));
21 dbms_output.put_line(empt.last);
22 end;
23 /
9
8
1
3
9
分享到:
相关推荐
Oracle数据库系统应用与开发 pdf 格式 数据库基础
oracle 数据库管理与应用系统开发代码/oracle 数据库管理与应用系统开发代码
這是一篇介紹oracle数据库系统应用与开发的基礎文章,特別適合初學者使用
资源名称:Oracle数据库开发与应用内容简介:《Oracle数据库开发与应用》分为5部分共25章,涵盖了数据库入门、数据查询、数据修改和维护、数据库编程、数据库管理。《Oracle数据库开发与应用》使用的开发环境是...
由浅入深地介绍了Oracle 10g系统的使用方法和基本管理。...本书全面介绍使用Oracle数据库管理应用与开发知识,适合作为普通高校计算机专业Oracle教材,也可以作为Oracle数据库开发和应用人员的参考资料。
oracle 数据库的应用开发 oracle 数据库的应用开发
oracle数据库应用与开发
Oracle 11g中文版数据库管理、应用与开发标准教程
Oracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.ppt
体验数据库的应用→认识 Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储过程与触发器 →管理安全性→数据库...
Oracle 数据库管理与应用系统开发: Oracle编程 创建存储过程 创建自定义类型 使用存储过程和函数 创建存储过程 创建函数 使用触发器和作业 创建触发器 创建序列等 跟踪和调试 创建存储过程 创建...
Oracle10g数据库管理与应用系统开发光盘
Oracle数据库的开发与应用培训
学生成绩管理演示系统是一个用 ASP 实现的简单的网上学生成绩 管理系统。使用 ADO 对象来访问后台数据库,包含学生信息的查询界面,学生 信息的录入、修改、删除界面,学生成绩的录入修改界面。
Oracle数据库系统应用开发课程设计说明书,内含完整DFD图、视图设计、过程函数触发器设计以及主要操纵语句。
Oracle数据库应用开发及实践.rar