收藏 分享(赏)

韩顺平玩转oracle10g实战教程第6讲.ppt

上传人:精品资料 文档编号:10530203 上传时间:2019-11-26 格式:PPT 页数:23 大小:404.50KB
下载 相关 举报
韩顺平玩转oracle10g实战教程第6讲.ppt_第1页
第1页 / 共23页
韩顺平玩转oracle10g实战教程第6讲.ppt_第2页
第2页 / 共23页
韩顺平玩转oracle10g实战教程第6讲.ppt_第3页
第3页 / 共23页
韩顺平玩转oracle10g实战教程第6讲.ppt_第4页
第4页 / 共23页
韩顺平玩转oracle10g实战教程第6讲.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、,主讲 韩顺平,玩转oracle 10g实战教程,主讲:韩顺平,email:,主讲 韩顺平,玩转oracle 10g实战教程,oracle第6讲,1. pl/sql的进阶 2. oracle的视图,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 介绍 在任何计算机语言(c,java,c#,c+)都有各种控制语句(条件语句,循环结构,顺序控制结构)在pl/sql中也存在这样的控制结构.在本部分学习完毕后,希望大家达到 : 1) 使用各种if语句 2)使用循环语句 3)使用控制语句-goto 和 null;,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进

2、阶控制结构, 条件分支语句 pl/sql中提供了三种条件分支语句 if - then, if -then-else, if-then-elsif-else 这里我们可以和java语句进行一个比较 简单的条件判断 if then?编写一个过程,可以输入一个雇员名,如果该雇员的工资低于 2000,就给该雇员工资增加10%,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 二重条件分支 ifthen-else ?编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就把补助设为200; 多重条件分支 if-then-elsif-el

3、se ?编写一个过程,可以输入一个雇员编号,如果该雇员的职位是 PRESIDENT 就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200.,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 循环语句 -loop 是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop 结尾,这种循环至少会被执行一次. 案例:现有一张表users,表结构如下请,编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加.,主讲 韩顺平,玩转oracle 10g实战教程,pl/

4、sql进阶控制结构, 循环语句 while循环 基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以whileloop 开始,以end loop结束 案例:现有一张表users,表结构如下请,编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加.,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 循环语句 for循环 基本for循环的基本结构如下 beginfor i in reverse 110 loopinsert into users values(i,顺平);en

5、d loop; end; / 我们可以看到控制变量i,在隐含中就在不停的增加,推荐使用loop 循环结构,不推荐使用for循环,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 顺序控制语句-goto ,null goto语句 goto语句用于跳转到特定标号去执行语句.注意由于使用goto语句会增加程序的复杂性,并使得应用程序可以读性变差,所以在做一般应用开发时,建议大家不要使用goto语句.基本语法如下 goto lable,其中lable是已经定义好的标号名, declare i int :=1; begin loopdbms_output.put_line(输出

6、i=|i);if i=10 thengoto end_loop;end if;i:=i+1;end loop; dbms_output.put_line(循环结束); end;,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶控制结构, 顺序控制语句-goto ,null null null 语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性。,举一个简单的案例,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶编写分页过程, 介绍 分页是任何一个网站(bbs、网上商城、blog)都会使用到的技术,因此

7、学习pl/sql编程开发就一定要掌握该技术.,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶编写分页过程, 无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解。首先是掌握最简单的存储过程,无返回值的存储过程: 案例:现有一张表 book ,表结构如下:请编写一个过程,可以向book表添加书,要求通过java程序调用该过程.,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶编写分页过程, 有返回值的存储过程(非列表) 再看如何处理有返回值的存储过程: 案例:编写一个过程,可以输入雇员的编号,返回

8、该雇员的姓名。案例扩展:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资、和岗位。,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶编写分页过程, 有返回值的存储过程(列表结果集) 案例:编写一个过程,输入部门号,返回该部门所有雇员信息。 对该题分析如下: 由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了,步骤如下: 建一个包。 建立存储过程。 下面看看如何在java程序中调用,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶编写分页过程, 编写分

9、页过程 有了上面的基础,相信大家可以完成分页存储过程了。 要求,请大家编写一个存储过程,要求可以输入表名、每页显示记录数、当前页,排序字段(dept降序)。返回总记录数,总页数,和返回的结果集.如果大家忘了oracle中如何分页,请参考第三天的内容. 先自己完成,老师在后面给出答案,并讲解.,温馨提示,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶例外处理, 例外的基本概念 在PL/SQL 的执行过程中发生异常时系统所作的处理称为一个例外情况(exception)。通常例外情况的种类有三种: 预定义的ORACLE 例外情况ORACLE 预定义的例外情况大约有24 个,对于这种

10、例外情况无须在程序中定义,由ORACLE 自动地触发。(重点) 非预定义的ORACLE 例外情况由使用者增加定义例外情况,然后ORACLE 自动将其触发执行。 自定义例外,这个用的较少。,Exception When 异常情况名 异常处理代码 When 异常情况名 异常处理代码 异常处理代码,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶例外处理, 例外传递 如果不处理例外我们看看会出现什么情况: 案例,编写一个过程,可接收雇员的编号,并显示该雇员的姓名.问题是,如果输入的雇员编号不存在,怎样去处理呢?,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶例外处理

11、, 常用的预定义例外ORACLE 预定之例外情况的处理,下列出常见几个例外情况名 错误代码 描述 NO_DATA_FOUND ORA-01403 对于SELECT 叙述没有传回任何值。 TOO_MANY_ROWS ORA-01427 只允许传回一笔记录的SELECT 叙述结果却多于一笔。 INVALID_CURSOR ORA-01001 使用非法的的光标操作。 VALUE_ERROR ORA-06502 出现数值、数据形态转换、撷取字符串或强制性的错误。 INVALID_NUMBER ORA-01722 字符串到数值的转换失败。 ZERO_DIVIDE ORA-01476 被零除。 DUP_V

12、AL_ON_INDEX ORA-00001 试图向具有唯一键值的索引中插入一个重复键值。 CASE_NOT_FOUND ORA-xxxxx 没有case条件匹配 CURSOR_NOT_OPEN ORA-xxxxxx 游标没有打开,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶例外处理, 预定义例外 case_not_found 在开发pl/sql块中编写case语句时,如果在when子句中没有包含必须的条件分支,就会触发case_not_found的例外 预定义例外 zero_divide 当执行 2/0 语句时,则会触发该例外。 预定义例外 no_data_found 下面

13、是一个pl/sql块,当执行select into 没有返回行,就会触发该例外 预定义例外 too_many_rows 当执行select into 语句时,如果返回超过了一行,则会触发该例外。,对上面的每个例外,我们都给大家举一个案例说明:,主讲 韩顺平,玩转oracle 10g实战教程,pl/sql进阶例外处理, 如何处理多个的例外 set serveroutput on; declare var_name varchar(60); begin select ename into var_name from emp where deptno=10; exception when no_da

14、ta_found then dbms_output.put_line( 没有匹配数据!); when too_many_rows then dbms_output.put_line(返回多行数据!); when others then dbms_output.put_line(提示 错误不明!); end;,主讲 韩顺平,玩转oracle 10g实战教程,oracle视图, 介绍 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。图示,主讲

15、 韩顺平,玩转oracle 10g实战教程,oracle视图, 视图与表的区别表需要占用磁盘空间,视图不需要 视图不能添加索引 使用视图可以简化 复杂查询 比如:学生选课系统 视图用利于提高安全性 比如:不同用户查看不同视图,举例说明,主讲 韩顺平,玩转oracle 10g实战教程,oracle视图, 创建视图 create view 视图名 as select语句 with read only 创建或修改视图 create or replace view 视图名 as select语句 with read only 删除视图 drop view 视图名,当表结构过于复杂,请使用视图吧!,视图,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报