第4章 PLSQL语言基础(理论)01修改后.doc

上传人:cn****1 文档编号:543711031 上传时间:2023-03-08 格式:DOC 页数:31 大小:878.52KB
返回 下载 相关 举报
第4章 PLSQL语言基础(理论)01修改后.doc_第1页
第1页 / 共31页
第4章 PLSQL语言基础(理论)01修改后.doc_第2页
第2页 / 共31页
第4章 PLSQL语言基础(理论)01修改后.doc_第3页
第3页 / 共31页
第4章 PLSQL语言基础(理论)01修改后.doc_第4页
第4页 / 共31页
第4章 PLSQL语言基础(理论)01修改后.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第4章 PLSQL语言基础(理论)01修改后.doc》由会员分享,可在线阅读,更多相关《第4章 PLSQL语言基础(理论)01修改后.doc(31页珍藏版)》请在金锄头文库上搜索。

1、第4章PL/SQL语言基础本章学习内容1. PL/SQL语言简介2. 程序结构3. 流程控制4. 异常处理5. 开发动态SQL本章学习目标1. 掌握PL/SQL程序结构2. 掌握PL/SQL流程控制3. 掌握PL/SQL异常处理4. 掌握PL/SQL中开发动态SQL本章简介在第3章中,我们已经学习了同义词、序列、视图、索引等知识。并通过同义词以一种非常简便的方式去访问其它方案中的对象;通过视图将一些复杂的SQL语句封装起来方便使用;通过序列作为表的自动编号并做为主键实现了数据库的实体完整性;通过使用各种索引在数据量非常宠大的表中提高查询效率。但是要实现复杂的商用业务逻辑仅凭这些对象是远远不够的

2、,我们必须使用程序流程控制和异常处理机制等。本章将继续学习程序结构、流程控制、异常处理、开发动态SQL等知识。流程控制是PL/SQL对SQL最重要的扩展。流程控制结构包括条件控制、循环控制和顺序控制,流程控制为我们提供了实现复杂业务逻辑的一种途径。为处理程序中的异常,PL/SQL提供了一种异常错误处理机制,可以帮助实现对错误的捕获和处理,当异常发生时,PL/SQL会自动地捕获异常并自动地将程序控制流程转移到异常处理部分的程序。在PL/SQL程序设计中,可以直接使用DML和事务控制的语句,但DDL语句及系统控制语句却不能在PL/SQL中直接使用。如果需要在PL/SQL中使用DDL语句及系统控制语

3、句,可以通过使用动态SQL来实现,如需要动态建表或某个不确定的操作需要动态执行。4.1 PL/SQL语言简介4.1.1 PL/SQL概述PL/SQL是Oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件分支语句和循环语句),允许使用异常来处理Oracle错误等。在任何运行Oracle的平台上,应用开发人员都可以使用PL/SQL。通过使用PL/SQL,可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句。PL/SQL可以用于创建存储过程、触发器和程序包等,也可以用于处理业务规则、数据库事件或给SQL命令的执行添加程序逻辑。

4、4.1.2 PL/SQL优点PL/SQL是一种可移植的高性能事务处理程序,它支持SQL和面向对象编程,提供了良好的性能和高效的处理能力,具有以下6个方面的优点。1. 提高应用程序的运行性能在编写Oracle数据库应用程序时,开发人员可以直接将PL/SQL块内嵌到应用程序中,其最大的优点是可以降低网络开销、提高应用程序性能。对于其他异构数据库(例如SQL Server、Sybase、DB2等),当应用程序访问RDBMS时,每次只能发送单条SQL语句。而对于Oracle数据库而言,通过使用PL/SQL块,可以将多条SQL语句组织到同一个PL/SQL块中,从而降低了网络开销,提高了应用程序的性能。2

5、. 提供模块化的程序设计功能当开发数据库应用程序时,为了简化客户端应用程序的开发和维护工作,可以首先将企业规则或商业逻辑集成到PL/SQL子程序(过程、函数和包)中,然后在应用程序中调用子程序实现相应的程序功能。3. 允许定义标识符当使用PL/SQL开发应用模块时,为了使应用模块与应用环境实现数据交互,需要定义变量、常量、游标等各种标识符。例如,函数get_sal中的no为输入参数,用于接收雇员编号的输入值,而salary变量则用于临时存储雇员工资。4. 具有过程语言控制结构PL/SQL是Oracle在标准SQL上的过程性扩展,它不仅允许在PL/SQL块内嵌入SQL语句,而且允许在PL/SQL

6、块中使用各种类型的条件分支语句和循环语句。5. 具有良好的兼容性PL/SQL是Oracle所提供的用于实现应用模块的语言,在允许运行Oracle的任何平台上都可以使用PL/SQL。例如,不仅可以在Oracle数据库中使用PL/SQL开发数据库端的过程、函数和触发器,也可以在Oracle提供的应用开发工具Developer中使用PL/SQL开发客户端的过程、函数和触发器。6. 处理运行错误当设计并开发应用程序时,为了提高应用程序的健壮性,可以使用PL/SQL所提供的异常处理(EXCEPTION)集中处理各种Oracle错误和PL/SQL错误,从而简化错误处理。4.1.3 PL/SQL块所有的PL

7、/SQL程序都以块作为基本单位组成。块中包含过程化语句和SQL的DML语句。这些块可以按顺序出现,也可以相互嵌套(一个块在另一个块的内部)。按是否带有名称以及在数据库中的存储方式,块可以分为以下5类。1. 匿名块匿名块是出现在应用程序中的没有名字且不存储到数据库中的块。匿名块可以出现在SQL语句可以出现的地方,它们可以调用其他程序,却不能被其他程序调用。2. 命名块命名块是一种带有标签的匿名块,标签为块指定了一个名称。3. 子程序子程序是存储在数据库中的过程(procedure)、函数(function),生成之后可以被多次执行。4. 程序包程序包是存储在数据库中的一组子程序、变量定义。程序包

8、中的子程序可以被其他程序包或者子程序调用。如果声明为局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。5. 触发器触发器是一种存储在数据库中的命名块,生成之后可以被多次执行。在相应的触发器事件发生之前或之后就会被执行一次或多次(每行记录一次)。触发器事件一般是指对特定的数据库表、视图进行的操作,如INSERT、UPDATE和DELETE等(称为DML触发器);或者对数据库级的操作,如关闭、启动、登录、退出数据库,创建对象、修改对象、删除对象等(称为系统触发器)。4.2 程序结构4.2.1 组成部分PL/SQL程序块由3个部分组成:定义部分、执行部分和异常处理部分。其中,定义部分用于定

9、义常量、变量、游标、异常和复杂数据类型等;执行部分用于实现应用模块功能,该部分包含需要执行的PL/SQL语句和SQL语句;异常处理部分用于处理执行部分可能出现的运行错误。PL/SQL块的基本结构如下:DECLARE定义部分BEGIN执行部分EXCEPTION异常处理部分END;其中,定义部分以DECLARE开始,该部分是可选的;执行部分以BEGIN开始,该部分是必须的;异常处理部分以EXCEPTION开始,该部分是可选的;END则是PL/SQL程序块的结束标记。创建一个匿名程序块,该程序块用于接收用户输入的部门名称,计算并输出该部门总工资,还用于处理用户输入的部门名称在库中不存在的异常,如图1

10、.4.1所示。4. 异常处理部分3. 执行业务逻辑1. 设置输出、显示环境变量2. 定义块变量图1.4.1 PL/SQL程序块示例演示DECLARE、BEGIN和EXCEPTION后面没有“;”(分号),而END后则必须要带“;”(分号)。注意4.2.2 PL/SQL注释在PL/SQL程序中加入注释,可以帮助理解程序,PL/SQL编译器在编译时会忽略注释。1. 单行注释单行注释可以在一行的任何地方由两个短横线(-)开始,并且直到该行的最后。2. 多行注释多行注释由“/*”开始、“*/”结束,可以跨越多行,但不允许嵌套。在调试PL/SQL程序时,完全可以用单行或多行注释来将暂时不需要或不正确的语

11、句进行注释或禁用。图1.4.2将演示PL/SQL中的注释的使用。图1.4.2 PL/SQL中的注释示例演示4.2.3 常量与变量在声明部分中可以声明需要使用的常量、变量、函数、游标、异常处理名称等。1. 声明声明常量、变量的语法如下:identifier_name CONSTANT data_type NOT NULL:= value_expression | DEFAULT value_expression其中,identifier_name指定需要声明的常量、变量的名称;data_type指定数据类型;“:=”是赋值运算符(或使用DEFAULT);value_expression是赋值表达

12、式。如果有CONSTANT,则表明声明的是一个常量;如果有NOT NULL,则表明声明的变量不能为空(即在声明时必须赋值)。常量应该立即赋值,如果没有赋值则表示初始化为NULL。在PL/SQL中,每一行中能声明一个常量或变量。在引用一个常量或变量之前,必须先声明该常量或变量。注意图1.4.3中演示了声明和使用变量、常量的过程。图1.4.3 声明和使用变量、常量2. 使用SELECT INTO语句给变量赋值除了可以使用常量来给变量赋值之外,还可以从数据库表中查询获得值来赋予变量。图1.4.4中演示了通过SELECT INTO语句将从数据库表中查询的结果赋予变量的过程,根据雇员编号,查询获得雇员工

13、资、补助和总工资。图1.4.4 使用SELECT INTO语句给变量赋值4.2.4 数据类型编写PL/SQL程序时,若临时存储数值,则必须定义变量和常量;若在应用环境和子程序之间传递数据,则必须为子程序指定参数。而在PL/SQL程序中定义变量、常量和参数时,必须为它们指定PL/SQL数据类型。1. CHARCHAR表示固定长度字符串,长度不够的使用空格来补充,最多可以存储2000字节。2. VARCHAR2VARCHAR2表示可变长度字符串,最多可以存储4000字节。3. NUMBERNUMBER类型可以存储正数、负数、零、定点数和精度为38位的浮点数。其格式为:NUMBER(M,N)。其中,

14、M表示精度,代表数字的总位数;N表示小数点右边,数字的位数。4. DATE类型DATE数据类型用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日。DATE类型的长度是7,7个字节分别表示世纪、年、月、日、时、分和秒。5. TIMESTAMP类型TIMESTAMP数据类型用于存储日期的年、月、日、小时、分和秒值。其中,秒值精确到小数点6位,该数据类型同时包含时区信息。6. CLOB大字符串对象类型CLOB数据类型用于存储可变长度的字符数据,最多可存储4GB。该数据类型用于存储VARCHAR2类型不能存储的长文本信息。7. BLOB大二进制类型BLOB数据

15、类型用于存储较大的二进制对象,如图形、视频剪辑和声音剪辑等,该类型最多可以存储4GB数据。8. %TYPE当定义PL/SQL变量存放值时,必须确保变量使用合适的数据类型和长度,否则可能会在运行过程中出现PL/SQL运行错误。为了避免这种不必要的错误,可以使用%TYPE属性来定义变量。当使用%TYPE属性定义变量时,Oracle会自动地按照数据库列或其他变量来确定新变量的类型和长度。图1.4.5将演示使用%TYPE定义变量的过程。图1.4.5 使用%TYPE定义变量由图1.4.5可知,变量v_ename、v_sal与EMP表的ename列、sal列的数据类型和长度完全一致,而变量v_tax_sal与变量v_sal的数据类型和长度完全一致。因此,当ename列和sal列的类型和长度发生改变时,该PL/SQL块将不需要进行任何修改。9. %ROWTYPE如果一张表中包含较多的列,则可以使用%ROWTYPE来定义一个表示表中一行记录的变量,这种方式比分别使用%TYPE来定义表示表中各个列的变量要简洁得多。为了使一个变量的数据类型与一张表中记录的各个列的数据类型对应一致,Oracle提供了%ROWTYPE定义方式。图1.4.6中演示了使用%ROWTYPE来定义变量的过程。图1.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号