《Oracle数据库应用》课件11.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《Oracle数据库应用》课件11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle数据库应用 Oracle 数据库 应用 课件 11
- 资源描述:
-
1、第第1111章章 PL/SQLPL/SQLPL/SQL基础基础1PL/SQL支持的支持的SQL语句语句2流程控制语句流程控制语句3游标游标4异常异常5存储过程存储过程6函数函数7触发器触发器811.1 PL/SQL11.1 PL/SQL基础基础n PL(Procedural Language)/SQLPL(Procedural Language)/SQLl为为OracleOracle数据库提供的过程化编程语言数据库提供的过程化编程语言l可用于分组可用于分组SQLSQL语句,将它们一起发向服务器,减少语句,将它们一起发向服务器,减少网络传输,提高程序运行效率网络传输,提高程序运行效率l具有良好的
2、可移植性,可运行于任何有具有良好的可移植性,可运行于任何有Oracle Oracle ServerServer的地方的地方l提供了完善的程序控制结构,可以实现复杂、功能提供了完善的程序控制结构,可以实现复杂、功能强大的应用程序强大的应用程序l集成于集成于Oracle ServerOracle Server与与OracleOracle应用开发工具之中,应用开发工具之中,可方便地实现分布式计算可方便地实现分布式计算n 1.PL/SQL1.PL/SQL程序块的结构程序块的结构l一段完整的一段完整的PL/SQLPL/SQL程序块结构程序块结构DECLAREDECLARE 说明部分说明部分;BEGINB
3、EGIN 执行部分执行部分;EXCEPTION EXCEPTION 异常处理部分异常处理部分;END;END;/说明部分说明部分/异常处理部分可选异常处理部分可选标识符遵循先定义后使用的原则标识符遵循先定义后使用的原则每一条语句必须以分号;结束每一条语句必须以分号;结束在执行部分不能使用在执行部分不能使用DDLDDL语句语句当执行部分发生一个错误时,将会引起一个异常当执行部分发生一个错误时,将会引起一个异常异常发生后,正常的执行被停止并且转移到异常程序处理异常发生后,正常的执行被停止并且转移到异常程序处理异常处理完后,将结束对应异常处理完后,将结束对应PL/SQLPL/SQL块的执行块的执行注
4、释注释w/*注释多行文本注释多行文本 */w-注释一行文本注释一行文本NULLNULL语句属于可执行语句语句属于可执行语句在在SQLSQL*PlusPlus中,中,PL/SQLPL/SQL程序执行完成时总是返回提示程序执行完成时总是返回提示“PL/SQLPL/SQL过程已成功完成过程已成功完成”PL/SQLPL/SQL程序块可以嵌套程序块可以嵌套n 2 2.PL/SQL.PL/SQL编写规则编写规则l标识符以字母开头,后面可以是字母、数字、标识符以字母开头,后面可以是字母、数字、$、下、下划线和划线和#l标识符最长不超过标识符最长不超过3030个字符个字符l标识符的作用范围:视具体情况而定标识
5、符的作用范围:视具体情况而定程序块、子程序、包等程序块、子程序、包等lPL/SQLPL/SQL运算符运算符逻辑运算:逻辑运算:ANDAND、OROR、NOTNOT算术运算:算术运算:+、-、*、/、*(幂幂)关系运算:关系运算:=、!=!=、=、=1010 OROR emp_cursor emp_cursor%NOTFOUND%NOTFOUND;END LOOP;END LOOP;例题:例题:P186P186n 3.3.用于游标的循环用于游标的循环l使用使用FETCHFETCH语句每次只能获取一条记录,若依次获取语句每次只能获取一条记录,若依次获取结果集中的所有记录,需使用循环重复执行结果集中
6、的所有记录,需使用循环重复执行FETCHFETCHlLOOPLOOP循环循环LOOPLOOP 语句语句;END LOOP;END LOOP;LOOPLOOP循环循环当当FETCHFETCH语句不能从游标当前行取出数据时,循环结束语句不能从游标当前行取出数据时,循环结束lFORFOR循环循环FOR FOR 记录型变量名记录型变量名 IN IN 游标名游标名 LOOPLOOP 语句语句;END LOOP;END LOOP;例题:例题:P187P187FORFOR与其它循环语句相比所具有的优势:与其它循环语句相比所具有的优势:w 循环控制变量不需事先定义循环控制变量不需事先定义w 使用使用FORFO
7、R之前,系统能自动打开游标。之前,系统能自动打开游标。FORFOR循环结束后,系统循环结束后,系统能自动关闭游标,无需人为操作能自动关闭游标,无需人为操作w 在在FORFOR中,系统能自动执行中,系统能自动执行FETCHFETCH,无需人为操作,无需人为操作n 4.4.使用游标更新表中的数据使用游标更新表中的数据l用游标锁定记录用游标锁定记录在定义游标的在定义游标的SELECTSELECT语句中带语句中带FOR UPDATEFOR UPDATE子句子句l在在UPDATEUPDATE语句中使用游标限定要修改的记录语句中使用游标限定要修改的记录UPDATE tableUPDATE tableSET
8、 column_name=sql_expressionSET column_name=sql_expressionWHERE CURRENT OF WHERE CURRENT OF cursor_name;cursor_name;l在在DELETEDELETE语句中使用游标限定要删除的记录语句中使用游标限定要删除的记录DELETE from tableDELETE from tableWHERE CURRENT OF WHERE CURRENT OF cursor_name;cursor_name;例题:例题:P188P18811.5 11.5 异常异常n 异常异常l是是PL/SQLPL/SQ
9、L执行期间引发的一个错误或警告执行期间引发的一个错误或警告l可由可由OracleOracle错误引发或由程序显式地引发错误引发或由程序显式地引发l任何异常都将终止当前任何异常都将终止当前PL/SQLPL/SQL程序块的执行程序块的执行n PL/SQLPL/SQL中包括中包括3 3种异常:种异常:l预定义异常:预定义异常:2121个常见错误,由个常见错误,由SQLSQL语句隐式引发语句隐式引发l非预定义异常:非预定义异常:OracleOracle服务器返回的其他错误服务器返回的其他错误l用户自定义异常:由用户定义并用用户自定义异常:由用户定义并用RAISERAISE语句显式引语句显式引发发n 异
10、常处理部分的语法异常处理部分的语法EXCEPTION WHEN exception1 THEN statement1;statement2;WHEN exception2 THEN statement1;statement2;WHEN OTHERS THEN statement1;statement2;n 1 1.系统预定义异常系统预定义异常l系统对常见发生的错误事先定义好的异常,有错误系统对常见发生的错误事先定义好的异常,有错误编号和异常名称编号和异常名称l常见的预定义异常:常见的预定义异常:ACCESS_INTO_NULLCASE_NOT_FOUNDCOLLECTION_IS_NULLCU
11、RSOR_ALREADY_OPENDUP_VAL_ON_INDEXINVALID_CURSORINVALID_NUMBERLOGIN_DENIEDNO_DATA_FOUNDNOT_LOGGED_ONPROGRAM_ERRORROWTYPE_MISMATCHSELF_IS_NULLSTORAGE_ERRORSUBSCRIPT_BEYOND_COUNTSUBSCRIPT_OUTSIDE_LIMITSYS_INVALID_IDTIMEOUT_ON_RESOURCETOO_MANY_ROWSVALUE_ERRORZERO_DIVIDElNO_DATA_FOUNDNO_DATA_FOUND和和TOO_M
12、ANY_ROWSTOO_MANY_ROWS的防止的防止SET serveroutput ONDECLARE ret NUMBER;BEGIN SELECT COUNT(*)INTO ret FROM emp WHERE empno=9;-NO_DATA_FOUND IF ret=0 THEN DBMS_OUTPUT.PUT_LINE(没有符合条件的记录!没有符合条件的记录!);return;END IF;-TOO_MANY_ROWS IF ret1 THEN DBMS_OUTPUT.PUT_LINE(数据有错误,符合条件的记录数据有错误,符合条件的记录有多条!有多条!);return;END
13、IF;END;例题:例题:P190n 2 2.非预定义异常非预定义异常lOracle ServerOracle Server错误号格式错误号格式ORA-ORA-数字数字l非预定义异常的处理过程如下:非预定义异常的处理过程如下:(1)(1)声明一个异常类型变量声明一个异常类型变量异常类型变量名异常类型变量名 EXCEPTION;EXCEPTION;(2)(2)将异常类型变量与将异常类型变量与Oracle ServerOracle Server错误号进行关联错误号进行关联PRAGMA EXCEPTION_INIT(PRAGMA EXCEPTION_INIT(异常类型变量名异常类型变量名,Oracl
14、e ServerOracle Server错误号错误号););(3)(3)在异常处理部分引用异常类型变量名捕获并处理该异常在异常处理部分引用异常类型变量名捕获并处理该异常例题:例题:P191P191n 3 3.用户自定义异常用户自定义异常l用户自定义的异常处理需要用户自定义的异常处理需要3 3个步骤:个步骤:(1)(1)在在PL/SQLPL/SQL块的说明部分定义异常类型变量块的说明部分定义异常类型变量异常类型变量名异常类型变量名 EXCEPTION;EXCEPTION;(2)(2)在在PL/SQLPL/SQL块的执行部分将其引发块的执行部分将其引发RAISE RAISE 异常类型变量名异常类
15、型变量名;(3)(3)在异常处理部分引用异常类型变量名捕获并处理该异常在异常处理部分引用异常类型变量名捕获并处理该异常例题:例题:P191P19111.6 11.6 存储过程存储过程n 存储过程存储过程l能完成一定处理能完成一定处理/计算功能并存储在数据字典中的程计算功能并存储在数据字典中的程序,调用时在数据库服务器上运行,如存储过程、序,调用时在数据库服务器上运行,如存储过程、函数、触发器函数、触发器l一种命名的一种命名的PL/SQLPL/SQL程序块,可以设置程序块,可以设置0 0个或多个输入个或多个输入、输出参数、输出参数l经编译后存储在数据库中,执行效率比经编译后存储在数据库中,执行效
16、率比SQLSQL语句高语句高n 创建存储过程语法创建存储过程语法CREATE OR REPLACE PROCEDURE procedure_nameCREATE OR REPLACE PROCEDURE procedure_name (argument IN|OUT|IN OUT datatype,(argument IN|OUT|IN OUT datatype,)IS|AS IS|AS 说明部分说明部分;BEGINBEGIN 执行部分执行部分;EXCEPTIONEXCEPTION 异常处理部分异常处理部分;END procedure_name;END procedure_name;n 对比对
17、比SQL ServerSQL Server存储过程的语法:存储过程的语法:CREATE PROC EDURE 存储过程名存储过程名;编号编号 参数参数 数据类型数据类型 VARYING =默认值默认值 OUTPUT ,.n WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION AS SQL语句语句 .n l参数参数ININ型参数:由实际参数单向传递给形式参数型参数:由实际参数单向传递给形式参数OUTOUT型参数:用于返回值型参数:用于返回值IN OUTIN OUT型参数:给定实际参数值并返回一个结果值型参数:给定实际参数值并返回一个结果值默认为默认为IN
18、IN形式参数说明时不可指定数据宽度形式参数说明时不可指定数据宽度形式参数应以形式参数应以“P_P_”前缀命名前缀命名l注释:注释:-、/*/、REMREMlSHOW ERRORSSHOW ERRORS查看创建错误查看创建错误SHOW ERRORS FUNCTION|PROCEDURE|PACKAGE SHOW ERRORS FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|TRIGGER|VIEW schema.name|PACKAGE BODY|TRIGGER|VIEW schema.name l不可在存储过程中引用绑定变量不可在存储过程中引用绑定变量l1 1)
19、无参数的存储过程)无参数的存储过程不带输入参数和输出参数不带输入参数和输出参数l2 2)带)带inin参数的存储过程参数的存储过程带输入参数,可将数据传递给存储过程带输入参数,可将数据传递给存储过程l3 3)带)带outout参数的存储过程参数的存储过程可利用输出参数输出数据可利用输出参数输出数据l4 4)带)带in outin out参数的存储过程参数的存储过程参数类型为输入输出型参数类型为输入输出型例题:例题:P192P192n 存储过程的调用方式存储过程的调用方式lexecute/execexecute/execlcallcalllbegin.end;begin.end;例题:例题:P1
展开阅读全文