Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13

上传人:E**** 文档编号:89349612 上传时间:2019-05-23 格式:PPT 页数:27 大小:126.50KB
返回 下载 相关 举报
Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13_第1页
第1页 / 共27页
Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13_第2页
第2页 / 共27页
Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13_第3页
第3页 / 共27页
Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13_第4页
第4页 / 共27页
Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13》由会员分享,可在线阅读,更多相关《Oracle Database 10g基础教程(第二版) 教学课件 ppt 作者 978-7-302-15311-5 ch13(27页珍藏版)》请在金锄头文库上搜索。

1、第1页,第13章 过程、函数和程序包,本章概述 本章要点 教学过程,第2页,本章概述,前面章节涉及的程序块都是没有名称的。这种没有名称的PL/SQL程序块也可以称为匿名程序块。实际上,用户可以命名自己编写的程序块,并将其存储起来,以便以后使用。这些命名的PL/SQL程序块称为存储过程和函数,他们的集合称为程序包。 本章介绍过程、函数和程序包等内容。,第3页,本章要点,理解过程、函数和程序包的基本概念和特点 学习在过程中使用输入和输出参数 了解函数和过程的区别和联系 理解程序包的结构 掌握程序包的规范,第4页,教学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,第5页,教

2、学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,第6页,13.1 概述,使用过程、函数和程序包代替PL/SQL程序块由许多好处,例如,增强可扩展性、提高模块化水平、可重用性增强、可维护性加强、有利于抽象和数据隐藏、增强安全性等。 使用过程和函数可以允许开发人员增加新的功能,编写自己的例程,可以让用户灵活地扩展数据库的核心能力。这些改变并不是要改变Oracle的工作方式,而是可以让用户建立附加的过程和函数。用户既可以自己使用这些过程和函数,也可以与其他用户共享这些能力。 许多开发人员都非常重视开发模块化代码。用户通过编写小型的、可管理的过程,以便在用户应用中定义单独的处

3、理模块,可以将其组织在一起形成复杂的应用。小型的、分离的过程远远比复杂的过程更容易修改,且可以被更加有效地共享。 由于这些例程命名后保存在数据库中,所以任何应用都能够执行它们(只要它们具有合适的权限)。 使用过程、函数和程序包可以实现过程的抽象和数据的隐藏,例如,假设用户正在调用其他用户编写的give_employee_raise()过程,用户通过向其提供一些数据来进行工作。,第7页,教学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,第8页,13.2 过程,从本质上来看,过程就是命名的PL/SQL程序块,它可以被赋予参数并存储在数据库中,然后由另外一个应用或PL/SQ

4、L例程调用。 下面详细介绍过程的创建、执行、安全、使用参数等内容。,第9页,创建或替换,create or replace procedure procedure_name(parameter, parameter) authid definer | current_schemais | as pragma autonomous_transaction; local_declarations begin executable statements exception exception handlers end procedure_name;,第10页,示例,第11页,执行过程,创建过程之后即

5、可执行过程。用户既可以从匿名PL/SQL程序块中直接调用,也可以在SQL*Plus中使用execute()函数来执行。Execute()函数可以简写为exec。 首先,使用匿名PL/SQL程序块执行过程。如图13-4所示的示例使用了匿名PL/SQL程序块执行前面创建的my_proc过程。 还可以使用exec函数执行过程。相对来说,使用exec函数执行过程比使用匿名PL/SQL程序块调用my_proc过程更快捷、方便。,第12页,使用参数,过程可以进行参数化处理。参数可以是任意合法的PL/SQL类型。参数可以有3种模式,即in、out和in out各种参数的意义分别如下:。 in参数是输入参数,

6、需要通过调用者传入,只能由过程来读取。 out参数是输出参数,能够由过程写入。该参数适合用于过程向调用者返回多个信息。 in out参数同时具有in参数和out参数的特性,过程可以读取和写入它们的值。,第13页,参数传递,前面的示例使用了p_parm=100方式传递参数。实际上,在Oracle系统中,可以使用3种方式传递参数,即: 使用名称表示法 使用位置表示法 使用混合表示法,第14页,局域声明,如同匿名PL/SQL程序块一样,过程也可以定义局域变量。这些定义紧随可选的参数列表之后。在匿名PL/SQL程序块中,它使用declare关键字开始。在过程声明中,由于使用了create or rep

7、lace语法,所以不必再使用declare关键字。在前面的swap过程示例中,l_temp就是一个局域变量。 除了局域变量之外,在局域声明部分还可以定义其他内容。用户可以定义记录、类型、数组,甚至还可以是其它过程。,第15页,教学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,第16页,13.3 函数,函数与过程非常类似,也是数据库中存储的命名PL/SQL程序块。创建函数与创建过程要都遵循同样的规则。函数与过程的安全方式和参数传递也相同。函数的主要特征是它必须返回一个值。这个返回值既可以是number或varchar2这样简单的数据类型,也可以是PL/SQL数组或对象这

8、样复杂的数据类型。,第17页,语法,create or replace function function_name (parameter, parameter) return datatype authid definer | current_schema parallel_enable deterministic is | as pipelined using implementation_type aggregate update value with external context using implementation_type pragma autonomous_transac

9、tion; local declarations begin executable statements exception exception handlers end name;,第18页,返回值,定义过程和定义函数的主要区别之一是,定义函数必须使用return子句返回数据。在定义函数的函数体的任何地方,用户都可以return ;子句。需要注意的是,这里的expression表达式要等于return数据类型。 如图13-25所示的是一个创建函数的示例。,第19页,确定性,如果对于给定的输入,函数总是能够返回完全相同的结果,则称该函数具有确定性。例如,upper()函数具有确定性,如果向其输

10、入Oracle Database 10g,那么它将返回ORACLE DATABASE 10G。如果函数不能每次都返回相同的值,用户就不能将其作为确定性函数建立。 为了提示函数具有确定性,用户可以按照如图13-28所示的示例那样执行。,第20页,常见错误,实际上,用户在开发函数时,经常会遇到下面的错误:忘记获取返回值;试图定义不能返回值的函数;定义没有返回数据类型的函数等。 了解这些错误的形式将会帮助用户避免这些问题,并且可以在出现错误时快速修正它们。下面通过几个示例来介绍这些常见的错误。,第21页,教学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,第22页,13.4

11、程序包,create or replace package package_name authid current_schema | definer is | as pragma serially_reusable; collection_type_definition record_type_definition subtype_definition collection_declaration constant_declaration exception_declaration object_declaration record_declaration variable_declarati

12、on cursor_spec function_spec procedure_spec call_spec pragma restrict_references(assertions) end package_name;,第23页,程序包主体,create or replace package body package_name is | as pragma serially_reusable; collection_type_definition record_type_definition subtype_definition collection_declaration constant

13、_declaration exception_declaration object_declaration record_declaration variable_declaration cursor_spec function_spec procedure_spec call_spec begin sequence_of_statements end package_name;,第24页,规范,程序包规范是程序包的接口。在规范中定义的所有内容都可以由调用者使用,并且可以由具有这个程序包的execute权限的用户使用。在规范中定义的过程可以被执行,变量也可以被引用,类型也能够被访问。这些是程序

14、包的公共特性。 在如图13-32所示的示例中,将使用两个过程print_ename()和print_sal(),定义一个被称为employee_pkg的程序包。,第25页,主体,程序包主体是用户实际编写的子例程,用于实现规范中定义的接口。规范中显示的所有过程和函数都必须在主体中实现。 如图13-34所示的示例显示了如何实现employee_pkg程序包中的print_ename过程和print_sal过程。,第26页,程序包变量和其他声明,用户可以定义程序包的全局变量。这些变量既可以定义在程序包规范中,也可以定义在程序包的主体中。定义在规范中的那些变量可以像规范中的过程和函数一样被引用,这些变量被称为公共变量。这些变量可以被任何具有程序包的execute权限的用户进行读取和修改。在主体中定义的程序包级别的变量只能由主体中的过程实现来访问,这些变量被称为私有变量。 程序包级别的变量与过程和函数中的局域变量不同,它们会在数据库会话期间保持其的状态。这意味着,用户可以使用一次调用设置一个全局变量,以完成一些工作,然后返回,并且在过程执行时再次调用它的值,然后离开。,第27页,教学过程,13.1 概述 13.2 过程 13.3 函数 13.4 程序包,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号