第6章 PL-SQL编程基础_第1页
第6章 PL-SQL编程基础_第2页
第6章 PL-SQL编程基础_第3页
第6章 PL-SQL编程基础_第4页
第6章 PL-SQL编程基础_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、.1第六章第六章 PL/SQL编程基础编程基础l PL/SQL的简介的简介 l PL/SQL程序结构程序结构l PL/SQL的控制结构的控制结构l 出错处理出错处理.2 第三节:第三节:PL/SQL的控制结构的控制结构 uPL/SQL的控制结构包括的控制结构包括条件语句条件语句和和循环循环语句语句两种类型两种类型条件控制结构:条件控制结构:是根据另一条语句或表达式是根据另一条语句或表达式的结果执行一个操作或一条语句。的结果执行一个操作或一条语句。循环控制结构:循环控制结构:重复地执行一条或多条语句,重复地执行一条或多条语句,或者循环一定的次数,或者直到满足某一条或者循环一定的次数,或者直到满足

2、某一条件时退出。件时退出。 .3二、循环二、循环循环被分为四种类型:循环被分为四种类型:简单循环简单循环(LOOP.END LOOP)WHILE循环循环(WHILE .LOOP.END LOOP)数字式数字式FOR 循环循环(FOR.LOOP.END LOOP)在循环体内必须有退出循环的语句,在循环体内必须有退出循环的语句,否则否则就是就是死循环。死循环。退出循环的语法有两种退出循环的语法有两种:EXIT WHEN CONDITION;IF CONDITION THEN EXIT; END IF;.41、简单循环、简单循环 简单循环的语法如下:简单循环的语法如下:LOOP 语句序列;语句序列;

3、 . EXIT WHEN condition;END LOOP;.5例例1 1:用简单循环:用简单循环looploop语句实现输出语句实现输出1-101-10之间的平方数之间的平方数 declare i number:=1; begin loop dbms_output.put_line(i|的平方数为的平方数为|i*i); i:=i+1; exit when i10; end loop; end; /Loop开始退出循环体语句Loop结束.6例例2 2: declare i number:=1; begin loop dbms_output.put_line(i|的平方数为的平方数为|i*i

4、); i:=i+1; if i10 then exit; end if; end loop; end; /.72、WHILE循环循环WHILE循环的语法如下:循环的语法如下:WHILE condition LOOP 语句序列;语句序列;END LOOP;.8例例3 3:用:用WHILEWHILE循环结构求循环结构求1010的阶层。的阶层。 declare n number:=1; count1 number:=1; begin while count1=10 loop n:=n*count1; count1:=count1+1; end loop; dbms_output.put_line(n

5、); end; /While语句控制Loop开始While语句控制Loop结束.93、数字式、数字式FOR 循环循环数字式数字式FOR 循环的语法如下:循环的语法如下:FOR loop_counter IN REVERSE low_bound . high_bound LOOP 语句序列;语句序列;END LOOP;其中:其中:IN :表示索引变量的值从小到大:表示索引变量的值从小到大 IN REVERSE :表示索引变量的值从大到小:表示索引变量的值从大到小 loop_counter :INTEGER类型的索引变量。类型的索引变量。 low_bound : 指定索引变量值范围的最小值指定索引

6、变量值范围的最小值high_bound :指定索引变量值范围的最大值:指定索引变量值范围的最大值 .10例例4 4:用:用FORFOR循环结构求循环结构求1010的阶层。的阶层。 declare n number:=1; count1 number; begin for count1 in 2.10 loop n:=n*count1; end loop; dbms_output.put_line(n); end; /.11例例5 5:DeclareDeclare i number; i number;begin begin for i in 1.5for i in 1.5 looploop d

7、bms_output.put_line(i=|i); dbms_output.put_line(i=|i); end loop;end loop; dbms_output.put_line(end of for loop); dbms_output.put_line(end of for loop);end;end;/ /.12例例6:在在FOR循环中考虑索引变量的值从大到小循环中考虑索引变量的值从大到小begin begin for i in for i in REVERSEREVERSE 1.5 1.5 loop loop dbms_output.put_line(i=|i); dbms_

8、output.put_line(i=|i); end loop; end loop; dbms_output.put_line(end of for loop); dbms_output.put_line(end of for loop);end;end;/ /.13 第四节:出错处理第四节:出错处理 出错处理方法是程序对运行时刻出现的出错处理方法是程序对运行时刻出现的错误作出反应并进行处理的方法。错误作出反应并进行处理的方法。 在在PL/SQL块中,当错误发生时,程序控块中,当错误发生时,程序控制无条件地转移到当前制无条件地转移到当前PL/SQL块的出错处块的出错处理部分。一旦控制转移到出错

9、处理部分,就理部分。一旦控制转移到出错处理部分,就不能再转到相同块的可执行部分。不能再转到相同块的可执行部分。 出错处理是出错处理是PL/SQL块中可选部分。块中可选部分。.14一、出错处理的语法和原则一、出错处理的语法和原则 1、出错处理的语法、出错处理的语法 EXCEPTION WHEN 错误错误1 OR 错误错误2 THEN 语句序列语句序列1; WHEN 错误错误3 OR 错误错误4 THEN 语句序列语句序列2; . WHEN OTHERS THEN 语句序列语句序列3;END;.152、出错处理的原则、出错处理的原则 将将WHEN OTHERS从句放置在所有其他从句放置在所有其他

10、出错处理从句的出错处理从句的后面后面。 最多最多只能有一只能有一个个WHEN OTHERS从句。从句。 在块中必须以关键字在块中必须以关键字EXCEPTION开始一开始一 个出错处理。个出错处理。 可以在块中定义多个出错处理(可以在块中定义多个出错处理(WHEN语语 句),每一个出错处理包含一组语句。句),每一个出错处理包含一组语句。 当一个错误发生时,在离开块之前,当一个错误发生时,在离开块之前, PL/SQL只处理一个出错处理。只处理一个出错处理。.16二、各种错误处理二、各种错误处理 出错情况包括:出错情况包括:系统预定义的错误系统预定义的错误、用户自用户自定义的错误定义的错误。 错误错

11、误 描述描述 处理方向处理方向系统预定义系统预定义的错误的错误在在PL/SQL中经常中经常出现的出现的25个系统个系统定义的错误定义的错误 不必定义,允许服务不必定义,允许服务器隐式地触发它们,器隐式地触发它们,只需要在出错处理部只需要在出错处理部分处理它们。分处理它们。用户自定义用户自定义的错误的错误 开发者认为是非开发者认为是非正常的一个条件正常的一个条件 必须在说明部分定义,必须在说明部分定义,在执行部分显式地触在执行部分显式地触发它们,在出错处理发它们,在出错处理部分处理它们。部分处理它们。 .171、系统预定义的错误、系统预定义的错误 这些错误是在系统的这些错误是在系统的STANDA

12、RD包中定义的。直接在包中定义的。直接在PL/SQL块的出错处理部分的块的出错处理部分的WHEN从句中进行处理。从句中进行处理。例例8 8:declaredeclare name student.sname%type; name student.sname%type;beginbegin select sname into name from student where select sname into name from student where sno=sno=0588011005880110; dbms_output.put_line(name); dbms_output.put_l

13、ine(name); exception exception when no_data_found then when no_data_found then dbms_output.put_line( dbms_output.put_line(没有找到所需要的数据没有找到所需要的数据!);!);end;end;/ /系统错误异常处理系统错误异常处理.18例例9 9:declaredeclare name student.sname%type; name student.sname%type;beginbegin Select sname into name from student where

14、 Select sname into name from student where sno=sno=0588010105880101; dbms_output.put_line(name); dbms_output.put_line(name);exceptionexception when no_data_found then when no_data_found then dbms_output.put_line( dbms_output.put_line(没有找到所需要的数据没有找到所需要的数据!);!);end;end;/ /.19例例1010: declare a number:=

15、8; b number:=0; c number(3); begin c:=a/b; dbms_output.put_line(c); exception when zero_divide then dbms_output.put_line(错误,除数不能为错误,除数不能为0!); end; /.20.21.222、用户自定义的错误、用户自定义的错误 用户自定义的错误是程序定义的一个错误,用户自定义的错误是程序定义的一个错误,并不一定是一个并不一定是一个Oracle错误,它可能是与业务错误,它可能是与业务相关的一个错误,比如违反了业务规则。相关的一个错误,比如违反了业务规则。 处理用户自定义的

16、错误分处理用户自定义的错误分三步三步: (1) 定义错误定义错误 (2) 触发错误触发错误 (3) 处理错误处理错误.23(1)定义错误)定义错误 用户定义的错误是在用户定义的错误是在PL/SQL块的说明块的说明(declare)部分进行定义的。和变量相类似,)部分进行定义的。和变量相类似,错误也有一个作用范围。错误也有一个作用范围。定义错误的定义错误的语法语法: 错误名错误名 exception;例:例: DECLARE MY_EXCEPTION exception;.24(2) 触发错误触发错误 当一个相关的条件满足时,在语句执当一个相关的条件满足时,在语句执行部分通过显式行部分通过显式使

17、用使用RAISE 语句来触发语句来触发用用户定义的错误。而预定义的错误是当相关户定义的错误。而预定义的错误是当相关的的Oracle错误发生时被错误发生时被PL/SQL执行引擎执行引擎隐式触发的。隐式触发的。触发错误的触发错误的语法语法: RAISE 错误名错误名;例:例:触发用户自定义的错误触发用户自定义的错误BEGIN IF V_COMM IS NULL THEN RAISE MY_EXCEPTION; END IF;.25(3)处理错误)处理错误 在程序的出错处理部分对自定义的错误在程序的出错处理部分对自定义的错误进行处理。处理方法与系统预定义的错误一进行处理。处理方法与系统预定义的错误一

18、样。样。 处理错误的处理错误的语法语法: WHEN 错误名错误名 THEN例:例:处理用户自定义的错误处理用户自定义的错误EXCEPTION WHEN MY_EXCEPTION THEN Dbms_output.put_line(奖金为空奖金为空);.26例例11:declaredeclare v_name student.sname%type; v_name student.sname%type; e exception; e exception;beginbegin select sname into v_name from student where select sname into v_name from student where sno=05880102;sno=05880102; if

温馨提示

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

评论

0/150

提交评论