调用存储过程详解精选PPT.ppt
调用存储过程详解第1页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例介绍块的结构和实例介绍 学习目标学习目标 理解理解oracle oracle 的的pl/sql pl/sql 概念概念 掌握掌握pl/sql pl/sql 编程技术(包括编写过程、函数、触发器编程技术(包括编写过程、函数、触发器.)pl/sql pl/sql 的介绍的介绍 pl/sql pl/sql 是什么是什么 pl/sql(procedural language/sql)pl/sql(procedural language/sql)是是oracle oracle 在标准的在标准的sql sql 语言上的扩展。语言上的扩展。pl/sql pl/sql 不仅允许嵌入不仅允许嵌入sql sql 语言,还可以定义变量和常量,允许使用条件语句和语言,还可以定义变量和常量,允许使用条件语句和 循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。第2页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 学习必要性学习必要性 1.1.提高应用程序的运行性能提高应用程序的运行性能 2.2.模块化的设计思想模块化的设计思想【分页的过程,订单的过程,转账的过程。分页的过程,订单的过程,转账的过程。】3.3.减少网络传输量减少网络传输量 4.4.提高安全性(提高安全性(sql sql 会包括表名,有时还可能有密码,传输的时候会泄露。会包括表名,有时还可能有密码,传输的时候会泄露。PL/SQLPL/SQL 就不会)就不会)为什么为什么PL/SQL PL/SQL 会快呢?会快呢?不好的地方:不好的地方:移植性不好(换数据库就用不了)移植性不好(换数据库就用不了)第3页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 sqlplus sqlplus 开发工具开发工具 sqlplus sqlplus 是是oracle oracle 公司提供的一个工具,这个因为我们在以前介绍过的:公司提供的一个工具,这个因为我们在以前介绍过的:举一个简单的案例:举一个简单的案例:编写一个存储过程,该过程可以向某表中添加记录。编写一个存储过程,该过程可以向某表中添加记录。一个简单的存储过程一个简单的存储过程 CREATE OR REPLACE CREATE OR REPLACE PROCEDUREPROCEDURE proc_helloworld proc_helloworldISISBEGINBEGIN DBMS_OUTPUT.put_line(Hello World!);DBMS_OUTPUT.put_line(Hello World!);END;END;/第4页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 需要在屏幕上显示出需要在屏幕上显示出DBMS_OUTPUT.put_lineDBMS_OUTPUT.put_line的输出字符串,需要做一个小小的设置的输出字符串,需要做一个小小的设置SQL show serveroutputSQL show serveroutputserveroutput OFFserveroutput OFF SQL set serveroutput on SQL set serveroutput on SQL show serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED SQL show serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED 1.1.创建一个简单的表创建一个简单的表 Sql Sql 代码代码 1.create table mytest(name varchar2(30),passwd varchar2(30);1.create table mytest(name varchar2(30),passwd varchar2(30);第5页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 2.2.创建过程创建过程 Sql Sql 代码代码 1.1.createcreate oror replacereplace procedureprocedure sp_pro1 sp_pro1 is is 2.2.begin-begin-执行部分执行部分 3.insert into mytest values(3.insert into mytest values(杨世顺杨世顺,m1234),m1234);4.4.endend;5.5./replace:replace:表示如果有表示如果有sp_pro1sp_pro1,就替换,就替换 如何查看错误信息:如何查看错误信息:show error;show error;如何调用该过程:如何调用该过程:1 1)exec exec 过程名(参数值过程名(参数值1 1,参数值,参数值2.2.););SQLSQL执行执行 2 2)call call 过程名(参数值过程名(参数值1 1,参数值,参数值2.2.);程序调用);程序调用 第6页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sqln developerpl/sqln developer开发工具开发工具 pl/sql developer pl/sql developer 是用于开发是用于开发pl/sql pl/sql 块的集成开发环境块的集成开发环境(ide)(ide),它是一个独立,它是一个独立 的产品,而不是的产品,而不是oracle oracle 的一个附带品。的一个附带品。举一个简单案例:举一个简单案例:编写一个存储过程,该过程可以删除某表记录。编写一个存储过程,该过程可以删除某表记录。Sql Sql 代码代码 1.create or replace procedure sp_pro2 is1.create or replace procedure sp_pro2 is 2.begin-2.begin-执行部分执行部分 3.delete from mytest where name=3.delete from mytest where name=杨世顺杨世顺;4.end;4.end;第7页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sql pl/sql 基础基础 pl/sql pl/sql 介绍介绍 开发人员使用开发人员使用pl/sql pl/sql 编写应用模块时,不仅需要掌握编写应用模块时,不仅需要掌握sql sql 语句的编写方法,语句的编写方法,还要掌握还要掌握pl/sql pl/sql 语句及语法规则。语句及语法规则。pl/sql pl/sql 编程可以使用变量和逻辑控制语句,编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过 程模块、转账存储过程模块。而且如果使用程模块、转账存储过程模块。而且如果使用pl/sql pl/sql 编程,我们可以轻松地完成编程,我们可以轻松地完成 非常复杂的查询要求。非常复杂的查询要求。pl/sql pl/sql 可以做什么可以做什么 简单分类简单分类 过程过程(存储过程存储过程)函数函数 块块(编程编程)触发器触发器 包包第8页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 编写规范编写规范 编写规范编写规范n n 1.1.注释注释 单行注释单行注释 -Sql Sql 代码代码 1.select*from emp where empno=7788;-1.select*from emp where empno=7788;-取得员工信息取得员工信息 多行注释多行注释 /*.*/*.*/来划分来划分 2.2.标志符号的命名规范标志符号的命名规范 1).1).当定义变量时,建议用当定义变量时,建议用v_v_作为前缀作为前缀v_salv_sal 2).2).当定义常量时,建议用当定义常量时,建议用c_c_作为前缀作为前缀c_ratec_rate 3).3).当定义游标时,建议用当定义游标时,建议用_cursor _cursor 作为后缀作为后缀emp_cursoremp_cursor 4).4).当定义例外时,建议用当定义例外时,建议用e_e_作为前缀作为前缀e_errore_error 第9页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sql pl/sql 块介绍块介绍 介绍介绍n n 块块(block)(block)是是pl/sql pl/sql 的基本程序单元,编写的基本程序单元,编写pl/sql pl/sql 程序实际上就是编写程序实际上就是编写 pl/sql pl/sql 块,要完成相对简单的应用功能,可能只需要编写一个块,要完成相对简单的应用功能,可能只需要编写一个pl/sql pl/sql 块,但是块,但是 如果想要实现复杂的功能,可能需要在一个如果想要实现复杂的功能,可能需要在一个pl/sql pl/sql 块中嵌套其它的块中嵌套其它的pl/sql pl/sql 块。块。块块n n结构示意图结构示意图 pl/sql pl/sql 块由三个部分构成:定义部分,执行部分,例外处理部分。块由三个部分构成:定义部分,执行部分,例外处理部分。如下所示:如下所示:declaredeclare/*/*定义部分定义部分定义常量、变量、游标、例外、复杂数据类型定义常量、变量、游标、例外、复杂数据类型*/beginbegin/*/*执行部分执行部分要执行的要执行的pl/sql pl/sql 语句和语句和sql sql 语句语句*/exceptionexception/*/*例外处理部分例外处理部分处理运行的各种错误处理运行的各种错误*/end;end;定义部分是从定义部分是从declare declare 开始的,该部分是可选的;开始的,该部分是可选的;执行部分是从执行部分是从begin begin 开始的,该部分是必须的;开始的,该部分是必须的;例外处理部分是从例外处理部分是从exception exception 开始的,该部分是可选的。开始的,该部分是可选的。可以和可以和java java 编程结构做一个简单的比较。编程结构做一个简单的比较。第10页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sql pl/sql 块的实例块的实例(1)(1)实例实例1-1-只包括执行部分的只包括执行部分的pl/sql pl/sql 块块n n Sql Sql 代码代码 1.set serveroutput on-1.set serveroutput on-打开输出选项打开输出选项 2.begin2.begin 3.dbms_output.put_line(hello);3.dbms_output.put_line(hello);4.end;4.end;相关说明:相关说明:dbms_output dbms_output 是是oracle oracle 所提供的包所提供的包(类似类似java java 的开发包的开发包),该包包含一些过程,该包包含一些过程,put_line put_line 就是就是dbms_output dbms_output 包的一个过程。包的一个过程。第11页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sql pl/sql 块的实例块的实例(2)(2)实例实例2-2-包含定义部分和执行部分的包含定义部分和执行部分的pl/sql pl/sql 块块n n Sql Sql 代码代码 1.declare1.declare 2.v_ename varchar2(5);-2.v_ename varchar2(5);-定义字符串变量定义字符串变量 3.begin3.begin 4.select ename into v_ename from emp where empno=&aa;4.select ename into v_ename from emp where empno=&aa;5.dbms_output.put_line(5.dbms_output.put_line(雇员名:雇员名:|v_ename);|v_ename);6.end;6.end;7./7./如果要把薪水也显示出来,那么执行部分就应该这么写:如果要把薪水也显示出来,那么执行部分就应该这么写:Sql Sql 代码代码 1.select ename,sal into v_ename,v_sal from emp where empno=&aa;1.select ename,sal into v_ename,v_sal from emp where empno=&aa;相关说明:相关说明:&表示要接收从控制台输入的变量表示要接收从控制台输入的变量 第12页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sql pl/sql 块的实例块的实例(3)(3)实例实例3-3-包含定义部分,执行部分和例外处理部分包含定义部分,执行部分和例外处理部分 为了避免为了避免pl/sql pl/sql 程序的运行错误,提高程序的运行错误,提高pl/sql pl/sql 的健壮性,应该对可能的错误的健壮性,应该对可能的错误 进行处理,这个很有必要。进行处理,这个很有必要。1.1.比如在实例比如在实例2 2 中,如果输入了不存在的雇员号,应当做例外处理。中,如果输入了不存在的雇员号,应当做例外处理。2.2.有时出现异常,希望用另外的逻辑处理有时出现异常,希望用另外的逻辑处理 我们看看如何完成我们看看如何完成1 1 的要求。的要求。相关说明:相关说明:oracle oracle 事先预定义了一些例外,事先预定义了一些例外,no_data_found no_data_found 就是找不到数据的例外。就是找不到数据的例外。Sql Sql 代码代码 1.declare1.declare 2.-2.-定义变量定义变量 3.v_ename varchar2(5);3.v_ename varchar2(5);4.v_sal number(7,2);4.v_sal number(7,2);5.begin5.begin 6.-6.-执行部分执行部分 7.select ename,sal into v_ename,v_sal from emp where empno=&aa;7.select ename,sal into v_ename,v_sal from emp where empno=&aa;8.-8.-在控制台显示用户名在控制台显示用户名 9.dbms_output.put_line(9.dbms_output.put_line(用户名是:用户名是:|v_ename|v_ename|工资:工资:|v_sal);|v_sal);10.-10.-异常处理异常处理 11.exception11.exception 12.when no_data_found then12.when no_data_found then 13.dbms_output.put_line(13.dbms_output.put_line(朋友,你的编号输入有误!朋友,你的编号输入有误!);14.end;14.end;15./15./第13页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 pl/sqlpl/sql分类分类 -过程,函数,包,触发器过程,函数,包,触发器 过程过程 过程用于执行特定的操作,当建立过程时,既可以指定输入参数过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in)(in),也可以指,也可以指 定输出参数定输出参数(out)(out),通过在过程中使用输入参数,可以将数据传递到执行部分;通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在通过使用输出参数,可以将执行部分的数据传递到应用环境。在sqlplus sqlplus 中可以中可以 使用使用create procedure create procedure 命令来建立过程。命令来建立过程。第14页,此课件共34页哦PL/SQLPL/SQL 块的结构和实例 实例如下:实例如下:1.1.请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资请考虑编写一个过程,可以输入雇员名,新工资,可修改雇员的工资 2.2.如何调用过程有两种方法;如何调用过程有两种方法;exec callexec call 3.3.如何在如何在java java 程序中调用一个存储过程程序中调用一个存储过程 问题:如何使用过程返回值?问题:如何使用过程返回值?特别说明:特别说明:对于过程我们会在以后给大家详细具体的介绍,现在请大家先有一个概念。对于过程我们会在以后给大家详细具体的介绍,现在请大家先有一个概念。create procedure sp_pro3(spName varchar2,newSal number)iscreate procedure sp_pro3(spName varchar2,newSal number)is-不要写成不要写成number(3,2),number(3,2),表明类型就可以了,不需要大小。就好像表明类型就可以了,不需要大小。就好像Java Java 写方法写方法 时的参数一样时的参数一样 Sql Sql 代码代码 1.begin1.begin 2.-2.-执行部分,根据用户名去修改工资执行部分,根据用户名去修改工资 3.update emp set sal=newSal where ename=spName;3.update emp set sal=newSal where ename=spName;4.end;4.end;5./5./第15页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 java java 程序中调用一个存储过程程序中调用一个存储过程/演示演示java java 程序去调用程序去调用oracle oracle 的存储过程案例的存储过程案例 5.try5.try 6./1.6./1.加载驱动加载驱动 7.Class.forName(oracle.jdbc.driver.OracleDriver);7.Class.forName(oracle.jdbc.driver.OracleDriver);8./2.8./2.得到连接得到连接 9.Connection ct=DriverManager.getConnection(jdbc:o9.Connection ct=DriverManager.getConnection(jdbc:o racle:thin:127.0.0.1:1521:MYORA1,scott,m123);racle:thin:127.0.0.1:1521:MYORA1,scott,m123);11./3.11./3.创建创建CallableStatementCallableStatement 12.CallableStatement cs=ct.prepareCall(call sp_pr3(?,?);12.CallableStatement cs=ct.prepareCall(call sp_pr3(?,?);13./4.13./4.给给?赋值赋值 14.cs.setString(1,SMITH);14.cs.setString(1,SMITH);15.cs.setInt(2,10);15.cs.setInt(2,10);17.cs.execute();17.cs.execute();18./18./关闭关闭 19.cs.close();19.cs.close();20.ct.close();20.ct.close();21.catch(Exception e)21.catch(Exception e)22.e.printStackTrace();22.e.printStackTrace();23.23.24.24.25.25.第16页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 1.1.使用各种使用各种if if 语句语句 2.2.使用循环语句使用循环语句 3.3.使用控制语句使用控制语句goto goto 和和nullnull;条件分支语句条件分支语句 pl/sql pl/sql 中提供了三种条件分支语句中提供了三种条件分支语句if ifthenthen,if if then then else else,if if then then elsif elsif then then 这里我们可以和这里我们可以和java java 语句进行一个比较语句进行一个比较 简单的条件判断简单的条件判断 if if thenn thenn 问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于20002000,就,就 给该员工工资增加给该员工工资增加10%10%。Sql Sql 代码代码 1.create or replace procedure sp_pro6(spName varchar2)is1.create or replace procedure sp_pro6(spName varchar2)is 2.-2.-定义定义 3.v_sal emp.sal%type;3.v_sal emp.sal%type;4.begin4.begin 5.-5.-执行执行 6.select sal into v_sal from emp where ename=spName;6.select sal into v_sal from emp where ename=spName;7.-7.-判断判断 8.if v_sal2000 then8.if v_sal2000 then 9.update emp set sal=sal+sal*10%where ename=spName;9.update emp set sal=sal+sal*10%where ename=spName;10.end if;10.end if;11.end;11.end;12./12./第17页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 二重条件分支二重条件分支 if if then then else else 问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0 0 就在原来就在原来 的基础上增加的基础上增加100100;如果补助为;如果补助为0 0 就把补助设为就把补助设为200200;Sql Sql 代码代码 1.create or replace procedure sp_pro6(spName varchar2)is1.create or replace procedure sp_pro6(spName varchar2)is 2.-2.-定义定义 3.v_comm m%type;3.v_comm m%type;4.begin4.begin 5.-5.-执行执行 6.select comm into v_comm from emp where ename=spName;6.select comm into v_comm from emp where ename=spName;7.-7.-判断判断 8.if v_comm0 then8.if v_comm0 then 9.update emp set comm=comm+100 where ename=spName;9.update emp set comm=comm+100 where ename=spName;10.else10.else 11.update emp set comm=comm+200 where ename=spName;11.update emp set comm=comm+200 where ename=spName;12.end if;12.end if;13.end;13.end;14./14./第18页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 多重条件分支多重条件分支 if if then then elsif elsif thenn thenn 问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENTPRESIDENT 就给他的工资增加就给他的工资增加10001000,如果该雇员的职位是,如果该雇员的职位是MANAGER MANAGER 就给他的工资增加就给他的工资增加500500,其它职位的雇员工资增加其它职位的雇员工资增加200200。Sql Sql 代码代码 1.create or replace procedure sp_pro6(spNo number)is1.create or replace procedure sp_pro6(spNo number)is 2.-2.-定义定义 3.v_job emp.job%type;3.v_job emp.job%type;4.begin4.begin 5.-5.-执行执行 6.select job into v_job from emp where empno=spNo;6.select job into v_job from emp where empno=spNo;7.if v_job=PRESIDENT then7.if v_job=PRESIDENT then 8.update emp set sal=sal+1000 where empno=spNo;8.update emp set sal=sal+1000 where empno=spNo;9.elsif v_job=MANAGER then9.elsif v_job=MANAGER then 10.update emp set sal=sal+500 where empno=spNo;10.update emp set sal=sal+500 where empno=spNo;11.else11.else 12.update emp set sal=sal+200 where empno=spNo;12.update emp set sal=sal+200 where empno=spNo;13.end if;13.end if;14.end;14.end;15./15./16.16.第19页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 循环语句循环语句 looploop 是是pl/sql pl/sql 中最简单的循环语句,这种循环语句以中最简单的循环语句,这种循环语句以loop loop 开头,以开头,以end loop end loop 结结 尾,这种循环至少会被执行一次。尾,这种循环至少会被执行一次。案例:现有一张表案例:现有一张表usersusers,表结构如下:,表结构如下:用户用户id|id|用户名用户名 请编写一个过程,可以输入用户名,并循环添加请编写一个过程,可以输入用户名,并循环添加10 10 个用户到个用户到users users 表中,用户表中,用户 编号从编号从1 1 开始增加。开始增加。Sql Sql 代码代码 1.create or replace procedure sp_pro6(spName varchar2)is1.create or replace procedure sp_pro6(spName varchar2)is 2.-2.-定义定义:=:=表示赋值表示赋值 3.v_num number:=1;3.v_num number:=1;4.begin4.begin 5.loop5.loop 6.insert into users values(v_num,spName);6.insert into users values(v_num,spName);7.-7.-判断是否要退出循环判断是否要退出循环 8.exit when v_num=10;8.exit when v_num=10;9.-9.-自增自增 10.v_num:=v_num+1;10.v_num:=v_num+1;11.end loop;11.end loop;12.end;12.end;13./13./第20页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 循环语句循环语句 while while 循环循环n n 基本循环至少要执行循环体一次,而对于基本循环至少要执行循环体一次,而对于while while 循环来说,只有条件为循环来说,只有条件为truetrue 时,才会执行循环体语句,时,才会执行循环体语句,while while 循环以循环以while.loop while.loop 开始,以开始,以end loop end loop 结束。结束。案例:现有一张表案例:现有一张表usersusers,表结构如下:,表结构如下:用户用户id id 用户名用户名 问题:请编写一个过程,可以输入用户名,并循环添加问题:请编写一个过程,可以输入用户名,并循环添加10 10 个用户到个用户到users users 表中,表中,用户编号从用户编号从11 11 开始增加。开始增加。Sql Sql 代码代码 1.create or replace procedure sp_pro6(spName varchar2)is1.create or replace procedure sp_pro6(spName varchar2)is 2.-2.-定义定义:=:=表示赋值表示赋值 3.v_num number:=11;3.v_num number:=11;4.begin4.begin 5.while v_num=20 loop5.while v_num=20 loop 6.-6.-执行执行 7.insert into users values(v_num,spName);7.insert into users values(v_num,spName);8.v_num:=v_num+1;8.v_num:=v_num+1;9.end loop;9.end loop;10.end;10.end;11./11./第21页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 循环语句循环语句 for for 循环循环n n 基本基本for for 循环的基本结构如下循环的基本结构如下 Sql Sql 代码代码 1.begin1.begin 2.for i in reverse 1.10 loop2.for i in reverse 1.10 loop 3.insert into users values(i,3.insert into users values(i,xiaomingxiaoming););4.end loop;4.end loop;5.end;5.end;第22页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 我们可以看到控制变量我们可以看到控制变量i i,在隐含中就在不停地增加。,在隐含中就在不停地增加。顺序控制语句顺序控制语句 gotogoto,nullnull 1.goto 1.goto 语句语句 goto goto 语句用于跳转到特定符号去执行语句。注意由于使用语句用于跳转到特定符号去执行语句。注意由于使用goto goto 语句会增加程语句会增加程 序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家 不要使用不要使用goto goto 语句。语句。基本语法如下基本语法如下 goto lable goto lable,其中,其中lable lable 是已经定义好的标号名,是已经定义好的标号名,Sql Sql 代码代码 1.declare1.declare 2.i int:=1;2.i int:=1;3.begin3.begin 4.loop4.loop 5.dbms_output.put_line(5.dbms_output.put_line(输出输出i=|i);i=|i);6.if i=1 then6.if i=1 then 7.goto end_loop;7.goto end_loop;8.end if;8.end if;9.i:=i+1;9.i:=i+1;10.end loop;10.end loop;11.11.12.dbms_output.put_line(12.dbms_output.put_line(循环结束循环结束););13.end;13.end;第23页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 2.null2.null null null 语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用nullnull 语句的主要好处是可以提高语句的主要好处是可以提高pl/sql pl/sql 的可读性。的可读性。Sql Sql 代码代码 1.declare1.declare 2.v_sal emp.sal%type;2.v_sal emp.sal%type;3.v_ename emp.ename%type;3.v_ename emp.ename%type;4.begin4.begin 5.select ename,sal into v_ename,v_sal from emp where empno=5.select ename,sal into v_ename,v_sal from emp where empno=&no;&no;6.if v_sal 3000 then6.if v_sal 3000 then 7.update emp set comm=sal*0.1 where ename=v_ename;7.update emp set comm=sal*0.1 where ename=v_ename;8.else8.else 9.null;9.null;10.end if;10.end if;11.end;11.end;第24页,此课件共34页哦PL/SQL PL/SQL 块的结构和实例块的结构和实例 PL/SQLPL/SQL分页分页 编写分页过程编写分页过程 介绍介绍 分页是任何一个网站分页是任何一个网站(bbs,(bbs,网上商城,网上商城,blog)blog)都会使用到的技术,因此学习都会使用到的技术,因此学习pl/sqlpl/sql 编程开发就一定要掌握该技术。编程开发就一定要掌握该技术。无返回值的存储过程无返回值的存储过程 储过程:储过程:案例:现有一张表案例:现有一张表bookbook,表结构如下:,表结构如下:书号书号 书名书名 出版社出版社 请写一个过程,可以向请写一个过程,可以向book book 表添加书,要求通过表添加书,要求通过java java 程序调用该过程。程序调用该过程。-in:-in:表示这是一个输入参数,默认为表示这是一个输入参数,默认为inin