`
孔雀王子
  • 浏览: 42144 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

Oracle数据库管理、应用与开发(十八)

阅读更多

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数据库的理解,提升开发和管理能力,为实际项目中的高效数据处理打下坚实基础。

    oracle数据库系统应用与开发

    对于初学者来说,理解Oracle数据库系统应用与开发的基础至关重要,这将帮助他们掌握数据库的核心概念,从而在IT行业中建立稳固的基础。 一、Oracle数据库系统概述 Oracle数据库系统是Oracle公司开发的,它采用SQL...

    oracle 数据库管理与应用系统开发代码

    Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统...以上只是Oracle数据库管理与应用系统开发的一部分知识,实际操作中还需要结合具体场景和需求,灵活运用各种工具和技术,以确保系统的稳定运行和高效开发。

    Oracle 10g数据库管理、应用与开发标准教程

    由浅入深地介绍了Oracle 10g系统的使用方法和基本管理。...本书全面介绍使用Oracle数据库管理应用与开发知识,适合作为普通高校计算机专业Oracle教材,也可以作为Oracle数据库开发和应用人员的参考资料。

    oracle 数据库的应用开发

    oracle 数据库的应用开发 oracle 数据库的应用开发

    Oracle数据库的应用开发 Oracle数据库的应用开发.ppt

    Oracle数据库在应用开发中扮演着至关重要的角色,它是一个强大且广泛使用的数据库管理系统,尤其适合企业级的数据存储和处理。本教程将深入讲解如何基于Oracle数据库进行应用开发,包括数据库设计的方法、人事管理...

    Oracle 11g中文版数据库管理、应用与开发标准教程

    Oracle 11g中文版数据库管理、应用与开发标准教程

    Oracle数据库应用与开发

    本课程“Oracle数据库应用与开发”旨在帮助学生深入理解和掌握Oracle数据库的相关知识,包括其基本概念、架构、SQL语言、数据管理、性能优化及应用程序开发等。 一、Oracle数据库基础 Oracle数据库系统基于客户-...

    Oracle数据库应用与开发实例教程

    体验数据库的应用→认识 Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储过程与触发器 →管理安全性→数据库...

    Oracle数据库应用开发及实践.rar

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着重要的地位...从数据库设计、SQL编程、PL/SQL开发,到事务处理、安全管理以及备份恢复,全方位覆盖了Oracle数据库应用开发的各个方面。

    Oracle数据库应用与开发实例教程[吴海波主编][电子教案]

    吴海波主编的《Oracle数据库应用与开发实例教程》是一本深入浅出的教材,旨在帮助学习者掌握Oracle数据库的使用和开发技巧。本教程结合实际案例,提供了丰富的学习材料,对于学生和专业人士来说都是宝贵的参考资料。...

    Oracle10g数据库管理与应用系统开发光盘

    Oracle10g数据库管理系统是Oracle公司推出的一款强大的关系型数据库管理系统,主要应用于企业级的数据存储、管理和分析。...通过学习和掌握这些内容,可以有效地管理和开发高效、稳定、安全的Oracle数据库应用系统。

    Oracle 数据库管理与应用系统开发

    Oracle 数据库管理与应用系统开发: Oracle编程 创建存储过程 创建自定义类型 使用存储过程和函数 创建存储过程 创建函数 使用触发器和作业 创建触发器 创建序列等 跟踪和调试 创建存储过程 创建...

    Oracle数据库应用与开发案例教程

    《Oracle数据库应用与开发案例教程》是一本专为学习Oracle数据库应用与开发的读者精心编写的教材。本书深入浅出地介绍了Oracle数据库的基础知识、管理技巧以及开发实践,旨在帮助读者掌握Oracle数据库的核心技术和...

    Oracle数据库的开发与应用培训.doc

    Oracle数据库的开发与应用培训

    ORACLe数据库管理员教程

    Oracle数据库管理员教程旨在帮助读者...通过阅读指定的参考书籍,如《ORACLE数据库系统基础》、《数据库管理及应用开发》和《ORACLE数据库管理员教程》,可以深入理解Oracle数据库管理的各个方面,提升DBA的专业技能。

Global site tag (gtag.js) - Google Analytics