Oracle数据库教程 第7章1_第1页
Oracle数据库教程 第7章1_第2页
Oracle数据库教程 第7章1_第3页
Oracle数据库教程 第7章1_第4页
Oracle数据库教程 第7章1_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章PL/SQL编程 PL/SQL编程7.1PL/SQL语言基础础7.2PL/SQL程序结构构7.3异常处理理7.1PL/SQL语言基础础7.1.1PL/SQL语言优点点PL/SQL是一种高高效的事事务处理理语言,它具备备以下优优点:PL/SQL是一种高高性能的的基于事务务处理的语言,能运行行在任何何Oracle环境中,支持所所有数据据处理命命令。通通过使用用PL/SQL程序单元元处理SQL的数据定定义和数数据控制制元素。PL/SQL支持所有有SQL数据类型型和所有有SQL函数,同同时支持持所有Oracle对象类型型。PL/SQL块可以被被命名并并存储在在Oracle服务器中中,同时时也能被

2、被其他PL/SQL程序或SQL命令调用用,任何何客户/服务器工工具都能能访问PL/SQL程序,具具有很好好的可重重用性。可以使用用Oracle数据工具具管理PL/SQL程序的安安全性。可以授授权或撤撤销数据据库其他他用户访访问PL/SQL程序权限限。7.1PL/SQL语言基础础PL/SQL代码可以以使用任任何ASCII文本编辑辑器编写写,所以以对任何何能够运运行Oracle的操作系系统都是是非常便便利的。对于SQL,Oracle必须在同同一时间间处理每每一条SQL语句,在在网络环环境下这这就意味味着每一一个独立立的调用用都必须须被Oracle服务器处处理,从从而占用用大量的的服务器器时间,导致

3、网网络拥挤挤。而PL/SQL以整个语语句块形形式发给给服务器器,可以以减少网网络拥挤挤。7.1PL/SQL语言基础础7.1.2PL/SQL的基本结结构一个PL/SQL程序包含含一个或或多个逻逻辑块,每个块块都可以以划分为为三个部部分:声声明部分分(用DECLARE开头)、执行部部分(以以BEGIN开头)和和异常处处理部分分(以EXCEPTION开头)1、PL/SQL基本结构构如下:DECLARE声明部分分BEGIN执行部分分EXCEPTION异常处理理部分END;7.1PL/SQL语言基础础其中:声明部分分:定义义变量和和常量的的数据类类型和初初始值,以及程程序中要要使用的的函数、游标、异常处

4、处理名称称等。如如果没有有需要声声明的内内容,可可以省略略这一部部分。PL/SQL中要使用用的所有有定义都都必须在在这一部部分进行行集中定定义。执行部分分:此部部分是PL/SQL块中的指指令部分分,所有有的可执执行语句句都放在在这一部部分,包包括对数数据库的的操作语语句和各各种流程程控制语语句,也也可以嵌嵌套其他他的PL/SQL块。执行行部分至至少包含含一条可可执行语语句。异常处理理部分:包含在在执行部部分中,以关键键字EXCEPTION开始,到到END结束。当当程序检检测到错错误而产产生异常常时,就就转到由由EXCEPTION标识的部部分执行行异常处处理程序序。这部部分是可可选的,利用异异常

5、处理理可以提提高PL/SQL程序的健健壮性。7.1PL/SQL语言基础础2、PL/SQL的特殊结结构/*以名字标识PL/SQL块*/DECLARE声明部分分BEGIN执行部分分EXCEPTION异常处理理部分END;DECLARE主块声明明部分BEGIN主块执行行部分DECLARE子块声明明部分BEGIN子块执行行部分EXCEPTION子块异常常处理部部分END;EXCEPTION主块异常常处理部部分END;带命名块块的PL/SQL块嵌套结构构的PL/SQL块7.1PL/SQL语言基础础7.1.3PL/SQL的字符集集1、合法字字符,包包括:大写字母母A-Z和小写字字母a-z数字0-9符号()

6、、+、-、*、/、=、!、;、:、.、”、#、$、_、?制表符、空格符符、回车车符等非非显示的的间空符符号2、操作符符,包括括:算术操作作符关系操作作符逻辑操作作符3、其他字字符7.1PL/SQL语言基础础7.1.4PL/SQL基本语法法1、常量与与变量的的声明,语法格格式如下下:CONSTANTNOT NULL(宽度):=【例7.1】几个声明明的例子子 声明明一个长长度为10B的变量count,初值为为1,类型为为VARCHAR。c varchar2(10):= 1;声明一个个NUMBER数据类型型的常量量c_limit,并赋予予初值5000.00。c_limitconstantnumber

7、(8.2):=5000.00;声明一个个NUMBER数据类型型的常量量c_area,并用表表达式给给它赋初初值。c_areaconstantnumber(8.5):=3.14159*3*2;7.1PL/SQL语言基础础2、作用域变量的作作用域指指变量的的有效使使用范围围,它从从变量声声明开始始,直到到当前程程序块结结束,只只有在其其作用域域范围内内,程序序才能使使用该变变量,否否则将导导致编译译错误。在同一程程序块中中,不允允许声明明两个同同名变量量,但在在不同程程序块内内可以声声明两个个同名变变量。在程序块块内声明明的变量量称为局局部变量量,在程程序块外外声明的的变量称称为全局局变量。引用程

8、序序块内的的局部变变量不需需要加限限定词,而引用用块外的的全局变变量需要要加限定定词(即即父块的的名称)。子块中可可以引用用父块的的变量,但是父父块中不不能引用用子块的的变量。如果父块块与子块块具有相相同的变变量名,在子块块中引用用这个变变量时若若是不加加限定词词则引用用的是子子块内的的局部变变量。若若两个块块不是父父子关系系,则他他们之间间的变量量不能相相互引用用。7.1PL/SQL语言基础础(3)变量的的属性变量有名名字和数数据类型型两个属属性。变变量名用用于标识识该变量量,变量量的数据据类型确确定了该该变量存存放值的的格式及及允许的的运算。在PL/SQL中,使用用“%”表示属性性提示符符

9、,后面面紧跟属属性名。%TYPE和%ROWTYPE是PL/SQL中两个特特殊的属属性,常常用来定定义变量量,使被被定义变变量的数数据类型型与一个个已定义义变量(或参照照表中的的记录)的数据据类型相相一致。%TYPE使用%TYPE属性定义义变量时时,被定定义变量量的数据据类型与与一个已已经定义义了的变变量的数数据类型型相一致致,当被被参照的的变量数数据类型型改变后后,新定定义变量量的数据据类型也也随之改改变。当当无法准准确知道道被参照照变量的的数据类类型时,只能采采用这种种定义方方法。定定义格式式为:%TYPE7.1PL/SQL语言基础础【例7.1】声明三个个变量“v_班级名称称”,“v_班级人

10、数数”,“v_班主任”,其数数据类型型分别对对应“班班级表”中相应应字段的的数据类类型。根根据输入入的班级级代码,输出对对应的班班级名称称、人数数和班主主任信息息。代码码如下:DECLAREv_班级名称称班级表.班级名称称%TYPE;v_班级人数数 班级级表.班级人数数%TYPE;v_班主任班班级表表.班主任%TYPE;BEGINSELECT班级名称称,班级人数数,班主任intov_班级名称称,v_班级人数数,v_班主任FROM班级表WHERE班级代码码=&班级代码码;DBMS_OUTPUT.PUT_LINE(班级名称称:|v_班级名称称);DBMS_OUTPUT.PUT_LINE(班级人数数

11、:|v_班级人数数);DBMS_OUTPUT.PUT_LINE(班主任:|v_班主任);END;语句:Setserverouton7.1PL/SQL语言基础础%ROWTYPE使用%ROWTYPE属性能够够定义记记录变量量,使得得被定义义的记录录成员个个数、名名称、数数据类型型与已定定义的表表或视图图中列的的个数、名称和和数据类类型完全全相同。这种定定义方式式,可以以定义一一个表,当被参参照表中中列及数数据类型型改变时时,新定定义表中中的列及及数据类类型自动动改变。当一个表表有较多多列时,使用%ROWTYPE定义记录录,比使使用%TYPE要方便,并且不不容易出出错。定定义格式式为:%ROWTYP

12、E7.1PL/SQL语言基础础【例7.2】声明一个个变量“v_班级”,与班级级表具有有相同的的数据类类型。根根据输入入的班级级代码,输出对对应的班班级名称称、人数数和班主主任信息息。代码码如下:DECLAREv_班级班班级表%ROWTYPE;BEGINSELECT*intov_班级FROM班级表WHERE班级代码码=&班级代码码;DBMS_OUTPUT.PUT_LINE(班级名称称:|v_班级.班级名称称);DBMS_OUTPUT.PUT_LINE(班级人数数:|v_班级.班级人数数);DBMS_OUTPUT.PUT_LINE(班主任:|v_班级.班主任);END;7.1PL/SQL语言基础础

13、3、数据类型型标量类型型LOB型数据类型型定义的的运算符符7.1PL/SQL语言基础础【例7.3】声声明一个个TIMESTAMP类型的的变量,并为它它赋值。代码如如下:SETSERVEROUT ONDECLAREcheckoutTIMESTAMP(2);BEGINcheckout:=10-6月月-07 075;DBMS_OUTPUT.PUT_LINE(checkout);END;7.2PL/SQL程序结构构7.2.1选择结构构选择结构构又称条条件控制制,通过过先测试试一个条条件,根根据测试试结果选选择运行行不同的的语句段段。选择择结构允允许嵌套套执行。选择结构构常用到到的4种

14、语法格格式:IFTHENENDIF结构IFTHENELSEEND IF结构IFTHENELSIFENDIF结构CASE结构7.2PL/SQL程序结构构【例7.4】查查找“ASP.NET程序设设计”课课程,若若是“备备注”信信息为“C#”,将其其改为“J#”,否则则将“备备注”信信息置空空。7.2PL/SQL程序结构构DECLAREv_课程程课课程表%ROWTYPE;BEGINSELECT*INTO v_课程FROM课课程表表WHERE课课程名=ASP.NET程序序设计;IFv_课程程.备注注=C#THENUPDATE课课程表表SET备备注=J#WHERE课课程名=v_课课程.课课程名;ELSE

15、UPDATE课课程表表SET备备注=WHERE课课程名=v_课课程.课课程名;ENDIF;DBMS_OUTPUT.PUT_LINE(更新完完成!);END;试一试:数据被被修改了了吗?为为什么?作业一、用你你熟悉的的方法完完成该该问题,比较较两种方方法。7.2PL/SQL程序结构构【例7.5】学生成绩绩按照分分数段分分为“优优秀”、“良好好”、“合格”、“不不及格”4种等级,根据等等级的不不同,可可以输出出对应的的分数段段,代码码如下:DECLAREv_resultVARCHAR2(20):=良好;BEGINIFv_result=优秀 THENDBMS_OUTPUT.PUT_LINE(9010

16、0);ELSIFv_result=良好 THENDBMS_OUTPUT.PUT_LINE(8089);ELSIFv_result=合格 THENDBMS_OUTPUT.PUT_LINE(6079);ELSIFv_result=不及格 THENDBMS_OUTPUT.PUT_LINE(=90andv_score=80andv_score=60andv_score=0 andv_score 60)THENDBMS_OUTPUT.PUT_LINE(成绩:|v_score|不及格);ELSEDBMS_OUTPUT.PUT_LINE(成绩:|v_score|成绩异常常);ENDCASE;END;7.2P

17、L/SQL程序结构构【例7.7】使用CASE语句完成成例7.5程序。要要求使用用CASE语句第二二种语法法格式实实现,代代码如下下:DECLAREv_resultVARCHAR2(20):=良好;BEGINCASE v_resultWHEN 优秀 THENDBMS_OUTPUT.PUT_LINE(90100);WHEN 良好 THENDBMS_OUTPUT.PUT_LINE(8089);WHEN 合格 THENDBMS_OUTPUT.PUT_LINE(6079);WHEN 不及格 THENDBMS_OUTPUT.PUT_LINE(100;v_s:=v_s+v_i;v_i:=v_i+1;ENDL

18、OOP;DBMS_OUTPUT.PUT_LINE(1100自然数之之和:|v_s);END;7.2PL/SQL程序结构构【例7.9】利用WHILE循环计算算1至100的自然数数之和。代码如如下:DECLAREv_iNUMBER:=0;v_sNUMBER:=0;BEGINWHILEv_i=100LOOPv_s:=v_s+v_i;v_i:=v_i+1;ENDLOOP;DBMS_OUTPUT.PUT_LINE(1100自然数之之和:|v_s);END;7.2PL/SQL程序结构构【例7.10】利用FOR循循环语句句计算1至100的自自然数之之和。代代码如下下:DECLAREv_sNUMBER:=0;

19、BEGINFORv_i IN 1.100LOOPv_s:=v_s+v_i;ENDLOOP;DBMS_OUTPUT.PUT_LINE(1100自自然数之之和:|v_s);END;思考题:如何利利用循环环语句生生成数据据?7.2PL/SQL程序结构构7.2.3顺序结构构顺序结构构是一种种最简单单的控制制结构,程序按按语句顺顺序依次次执行。有时为为了打破破执行顺顺序,将将当前程程序跳转转到另一一个地方方继续运运行,需需要借助助GOTO语句。GOTO语句是一一种无条条件跳转转语句,能够将将语句无无条件地地跳转到到一个用用标签指指定的语语句,其其目的地地必须与与GOTO语句在同同一程序序块中或或更高层层次(比比如父块块中)中中。但过过多的使使用GOTO语句会导导致程序序复杂,破坏程程序的结结构。因因此,GOTO语句一般般只用在在从一个个PL/SQL块中跳转转到异常常处理语语句的前前面7.2PL/SQL程序结构构【例7.11】利用GOTO语句计算算1至100的自然数数之和。代码如如下:DECLAREv_iNUMBER:=0;v_sNUMBER:=0;BEGINv_i:=v_i+1;IFv_i=100THENv_s:=v_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论