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数据库系统是全球广泛使用的...通过深入学习“Oracle数据库系统应用与开发”,无论是初学者还是经验丰富的开发者,都能增强对Oracle数据库的理解,提升开发和管理能力,为实际项目中的高效数据处理打下坚实基础。
对于初学者来说,理解Oracle数据库系统应用与开发的基础至关重要,这将帮助他们掌握数据库的核心概念,从而在IT行业中建立稳固的基础。 一、Oracle数据库系统概述 Oracle数据库系统是Oracle公司开发的,它采用SQL...
Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统...以上只是Oracle数据库管理与应用系统开发的一部分知识,实际操作中还需要结合具体场景和需求,灵活运用各种工具和技术,以确保系统的稳定运行和高效开发。
由浅入深地介绍了Oracle 10g系统的使用方法和基本管理。...本书全面介绍使用Oracle数据库管理应用与开发知识,适合作为普通高校计算机专业Oracle教材,也可以作为Oracle数据库开发和应用人员的参考资料。
oracle 数据库的应用开发 oracle 数据库的应用开发
Oracle数据库在应用开发中扮演着至关重要的角色,它是一个强大且广泛使用的数据库管理系统,尤其适合企业级的数据存储和处理。本教程将深入讲解如何基于Oracle数据库进行应用开发,包括数据库设计的方法、人事管理...
Oracle 11g中文版数据库管理、应用与开发标准教程
本课程“Oracle数据库应用与开发”旨在帮助学生深入理解和掌握Oracle数据库的相关知识,包括其基本概念、架构、SQL语言、数据管理、性能优化及应用程序开发等。 一、Oracle数据库基础 Oracle数据库系统基于客户-...
体验数据库的应用→认识 Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储过程与触发器 →管理安全性→数据库...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着重要的地位...从数据库设计、SQL编程、PL/SQL开发,到事务处理、安全管理以及备份恢复,全方位覆盖了Oracle数据库应用开发的各个方面。
吴海波主编的《Oracle数据库应用与开发实例教程》是一本深入浅出的教材,旨在帮助学习者掌握Oracle数据库的使用和开发技巧。本教程结合实际案例,提供了丰富的学习材料,对于学生和专业人士来说都是宝贵的参考资料。...
Oracle10g数据库管理系统是Oracle公司推出的一款强大的关系型数据库管理系统,主要应用于企业级的数据存储、管理和分析。...通过学习和掌握这些内容,可以有效地管理和开发高效、稳定、安全的Oracle数据库应用系统。
Oracle 数据库管理与应用系统开发: Oracle编程 创建存储过程 创建自定义类型 使用存储过程和函数 创建存储过程 创建函数 使用触发器和作业 创建触发器 创建序列等 跟踪和调试 创建存储过程 创建...
《Oracle数据库应用与开发案例教程》是一本专为学习Oracle数据库应用与开发的读者精心编写的教材。本书深入浅出地介绍了Oracle数据库的基础知识、管理技巧以及开发实践,旨在帮助读者掌握Oracle数据库的核心技术和...
Oracle数据库的开发与应用培训
Oracle数据库管理员教程旨在帮助读者...通过阅读指定的参考书籍,如《ORACLE数据库系统基础》、《数据库管理及应用开发》和《ORACLE数据库管理员教程》,可以深入理解Oracle数据库管理的各个方面,提升DBA的专业技能。