调用oracle存储过程详解ppt课件.ppt
《调用oracle存储过程详解ppt课件.ppt》由会员分享,可在线阅读,更多相关《调用oracle存储过程详解ppt课件.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7讲 PL/SQL 块的结构和实例PL/SQL 块的结构和实例介绍学习目标理解oracle 的pl/sql 概念掌握pl/sql 编程技术(包括编写过程、函数、触发器.)pl/sql 的介绍pl/sql 是什么pl/sql(procedural language/sql)是oracle 在标准的sql 语言上的扩展。pl/sql 不仅允许嵌入sql 语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。PL/SQL 块的结构和实例学习必要性1.提高应用程序的运行性能2.模块化的设计思想【分页的过程,订单的过程,转账的过程。】3.减少网
2、络传输量4.提高安全性(sql 会包括表名,有时还可能有密码,传输的时候会泄露。PL/SQL就不会)为什么PL/SQL 会快呢?不好的地方:移植性不好(换数据库就用不了) PL/SQL 块的结构和实例 sqlplus 开发工具sqlplus 是oracle 公司提供的一个工具,这个因为我们在以前介绍过的:举一个简单的案例:编写一个存储过程,该过程可以向某表中添加记录。一个简单的存储过程CREATE OR REPLACE PROCEDURE proc_helloworldISBEGIN DBMS_OUTPUT.put_line (Hello World!);END;/PL/SQL 块的结构和实例
3、 需要在屏幕上显示出DBMS_OUTPUT.put_line的输出字符串,需要做一个小小的设置SQL show serveroutputserveroutput OFF SQL set serveroutput on SQL show serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED1.创建一个简单的表Sql 代码1. create table mytest(name varchar2(30),passwd varchar2(30); PL/SQL 块的结构和实例 2.创建过程Sql 代码1. create or replace procedure
4、sp_pro1 is2. begin-执行部分3. insert into mytest values(杨世顺,m1234);4. end;5. /replace:表示如果有sp_pro1,就替换如何查看错误信息:show error;如何调用该过程:1)exec 过程名(参数值1,参数值2.);SQL执行2)call 过程名(参数值1,参数值2.);程序调用 PL/SQL 块的结构和实例 pl/sqln developer开发工具pl/sql developer 是用于开发pl/sql 块的集成开发环境(ide),它是一个独立的产品,而不是oracle 的一个附带品。举一个简单案例:编写一个
5、存储过程,该过程可以删除某表记录。Sql 代码1. create or replace procedure sp_pro2 is2. begin-执行部分3. delete from mytest where name=杨世顺;4. end; PL/SQL 块的结构和实例 pl/sql 基础pl/sql 介绍开发人员使用pl/sql 编写应用模块时,不仅需要掌握sql 语句的编写方法,还要掌握pl/sql 语句及语法规则。pl/sql 编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块。而且如果使用pl/sql 编程,
6、我们可以轻松地完成非常复杂的查询要求。pl/sql 可以做什么简单分类过程(存储过程)函数块(编程)触发器包PL/SQL 块的结构和实例 编写规范编写规范n1.注释单行注释 -Sql 代码1. select * from emp where empno=7788; -取得员工信息多行注释 /*.*/来划分2.标志符号的命名规范1).当定义变量时,建议用v_作为前缀v_sal2).当定义常量时,建议用c_作为前缀c_rate3).当定义游标时,建议用_cursor 作为后缀emp_cursor4).当定义例外时,建议用e_作为前缀e_error PL/SQL 块的结构和实例 pl/sql 块介绍
7、介绍n块(block)是pl/sql 的基本程序单元,编写pl/sql 程序实际上就是编写pl/sql 块,要完成相对简单的应用功能,可能只需要编写一个pl/sql 块,但是如果想要实现复杂的功能,可能需要在一个pl/sql 块中嵌套其它的pl/sql 块。块n结构示意图pl/sql 块由三个部分构成:定义部分,执行部分,例外处理部分。如下所示:declare/*定义部分定义常量、变量、游标、例外、复杂数据类型*/begin/*执行部分要执行的pl/sql 语句和sql 语句*/exception/*例外处理部分处理运行的各种错误*/end;定义部分是从declare 开始的,该部分是可选的;
8、执行部分是从begin 开始的,该部分是必须的;例外处理部分是从exception 开始的,该部分是可选的。可以和java 编程结构做一个简单的比较。 PL/SQL 块的结构和实例 pl/sql 块的实例(1)实例1-只包括执行部分的pl/sql 块nSql 代码1. set serveroutput on -打开输出选项2. begin3. dbms_output.put_line(hello);4. end;相关说明:dbms_output 是oracle 所提供的包(类似java 的开发包),该包包含一些过程,put_line 就是dbms_output 包的一个过程。 PL/SQL 块
9、的结构和实例 pl/sql 块的实例(2)实例2-包含定义部分和执行部分的pl/sql 块nSql 代码1. declare2. v_ename varchar2(5); -定义字符串变量3. begin4. select ename into v_ename from emp where empno=&aa;5. dbms_output.put_line(雇员名:|v_ename);6. end;7. /如果要把薪水也显示出来,那么执行部分就应该这么写:Sql 代码1. select ename,sal into v_ename,v_sal from emp where empno=&aa;
10、相关说明:& 表示要接收从控制台输入的变量 PL/SQL 块的结构和实例 pl/sql 块的实例(3)实例3-包含定义部分,执行部分和例外处理部分为了避免pl/sql 程序的运行错误,提高pl/sql 的健壮性,应该对可能的错误进行处理,这个很有必要。1.比如在实例2 中,如果输入了不存在的雇员号,应当做例外处理。2.有时出现异常,希望用另外的逻辑处理我们看看如何完成1 的要求。相关说明:oracle 事先预定义了一些例外,no_data_found 就是找不到数据的例外。Sql 代码1. declare2. -定义变量3. v_ename varchar2(5);4. v_sal numbe
11、r(7,2);5. begin6. -执行部分7. select ename,sal into v_ename,v_sal from emp where empno=&aa;8. -在控制台显示用户名9. dbms_output.put_line(用户名是:|v_ename| 工资:|v_sal);10. -异常处理11.exception12.when no_data_found then13. dbms_output.put_line(朋友,你的编号输入有误!);14.end;15./PL/SQL 块的结构和实例 pl/sql分类 - 过程,函数,包,触发器PL/SQL 块的结构和实例 实
12、例如下:1.请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资2.如何调用过程有两种方法; exec call3.如何在java 程序中调用一个存储过程问题:如何使用过程返回值?特别说明:对于过程我们会在以后给大家详细具体的介绍,现在请大家先有一个概念。create procedure sp_pro3(spName varchar2, newSal number) is-不要写成number(3,2),表明类型就可以了,不需要大小。就好像Java 写方法时的参数一样Sql 代码1. begin2. -执行部分,根据用户名去修改工资3. update emp set sal=newSa
13、l where ename=spName;4. end;5. /PL/SQL 块的结构和实例 java 程序中调用一个存储过程/演示java 程序去调用oracle 的存储过程案例5. try6. /1.加载驱动7. Class.forName(oracle.jdbc.driver.OracleDriver);8. /2.得到连接9. Connection ct = DriverManager.getConnection(jdbc:oracle:thin:127.0.0.1:1521:MYORA1,scott,m123);11. /3.创建CallableStatement12. Callab
14、leStatement cs = ct.prepareCall(call sp_pr3(?,?);13. /4.给?赋值14. cs.setString(1,SMITH);15. cs.setInt(2,10);17. cs.execute();18. /关闭19. cs.close();20. ct.close();21. catch(Exception e)22. e.printStackTrace();23. 24. 25.PL/SQL 块的结构和实例 1.使用各种if 语句2.使用循环语句3.使用控制语句goto 和null;条件分支语句pl/sql 中提供了三种条件分支语句ifthe
15、n,if then else,if then elsif then这里我们可以和java 语句进行一个比较简单的条件判断 if thenn问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。Sql 代码1. create or replace procedure sp_pro6(spName varchar2) is2. -定义3. v_sal emp.sal%type;4. begin5. -执行6. select sal into v_sal from emp where ename=spName;7. -判断8. if v_sal2000 th
16、en9. update emp set sal=sal+sal*10% where ename=spName;10. end if;11.end;12./PL/SQL 块的结构和实例 二重条件分支 if then else问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0 就在原来的基础上增加100;如果补助为0 就把补助设为200;Sql 代码1. create or replace procedure sp_pro6(spName varchar2) is2. -定义3. v_comm m%type;4. begin5. -执行6. select comm into v_com
17、m from emp where ename=spName;7. -判断8. if v_comm0 then9. update emp set comm=comm+100 where ename=spName;10. else11. update emp set comm=comm+200 where ename=spName;12. end if;13.end;14./PL/SQL 块的结构和实例 多重条件分支 if then elsif thenn问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他
18、的工资增加500,其它职位的雇员工资增加200。Sql 代码1. create or replace procedure sp_pro6(spNo number) is2. -定义3. v_job emp.job%type;4. begin5. -执行6. select job into v_job from emp where empno=spNo;7. if v_job=PRESIDENT then8. update emp set sal=sal+1000 where empno=spNo;9. elsif v_job=MANAGER then10. update emp set sal
19、=sal+500 where empno=spNo;11. else12. update emp set sal=sal+200 where empno=spNo;13. end if;14.end;15./16.PL/SQL 块的结构和实例 循环语句 loop是pl/sql 中最简单的循环语句,这种循环语句以loop 开头,以end loop 结尾,这种循环至少会被执行一次。案例:现有一张表users,表结构如下:用户id | 用户名请编写一个过程,可以输入用户名,并循环添加10 个用户到users 表中,用户编号从1 开始增加。Sql 代码1. create or replace proc
20、edure sp_pro6(spName varchar2) is2. -定义 :=表示赋值3. v_num number:=1;4. begin5. loop6. insert into users values(v_num,spName);7. -判断是否要退出循环8. exit when v_num=10;9. -自增10. v_num:=v_num+1;11. end loop;12.end;13./PL/SQL 块的结构和实例 循环语句 while 循环n基本循环至少要执行循环体一次,而对于while 循环来说,只有条件为true时,才会执行循环体语句,while 循环以while.
21、loop 开始,以end loop 结束。案例:现有一张表users,表结构如下:用户id 用户名问题:请编写一个过程,可以输入用户名,并循环添加10 个用户到users 表中,用户编号从11 开始增加。Sql 代码1. create or replace procedure sp_pro6(spName varchar2) is2. -定义 :=表示赋值3. v_num number:=11;4. begin5. while v_num=20 loop6. -执行7. insert into users values(v_num,spName);8. v_num:=v_num+1;9. en
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 调用 oracle 存储 过程 详解 ppt 课件
限制150内