- 1
- 0
- 约1.04万字
- 约 29页
- 2017-09-02 发布于浙江
- 举报
第5章开发子程序和包理论01
第5章
开发子程序和包
本章学习内容过程
函数
程序包
本章学习目标掌握过程的创建与使用
掌握函数的创建与使用
掌握包的创建与使用
本章简介在章中已经学习PL/SQL语言、程序结构、流程控制、异常处理、开发动态SQL等知识但是到目前为止所创建的PL/SQL块都是匿名的,其缺点是每次执行时都要被重新编译且没有被存储在数据库中,因此不能被其他的PL/SQL块使用。本章将学习过程、函数和程序包等概念。过程与函数是命名的PL/SQL块,可以被编译后存储在数据库中,以备执行。因此其他PL/SQL块可以按名称来调用它们。所以可将商业逻辑、企业规则写成过程或函数保存到数据库中,以便共享。过程一般用于执行一个指定的操作,而函数一般用于计算并返回一个值。过程与函数也被称为子程序,因为它们是独立的、能被父程序调用程序包用于将逻辑相关的PL/SQL块或元素组织在一起,作为一个完整的单元存储在数据库中,用名称来标识程序包它具有面向对象的程序设计语言的特点,是对PL/SQL块或元素的封装。程序包类似于JAVA语言中的类,其中的变量相当于类中的成员变量,过程和函数相当于类中的方法。
开发子程序
子程序是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用中多次调用。PL/SQL有两种类型的子程序:过程和函数其中过程用于执行特定操作,而函数则用于返回特定数据。通过将商业逻辑和企业规则集成到PL/SQL子程序中,可简化客户端应用的开发和维护,提高应用的性能。
开发过程
过程一般用于执行一个指定的操作可将常用的特定操作封装成过程。语法:
CREATE [OR REPLACE] PROCEDURE procedure_name(argument1 [mode1] datatype1, argument2 [mode2] datatype2, ...)
IS [AS]
声明部分
BEGIN
执行部分
EXCEPTION
异常处理部分
END;
在语法中,procedure_name用于指定过程名称argument1、argument2等则用于指定过程的参数IS或AS用于开始一个PL/SQL块。注意,当指定参数数据类型时,不能指定其长度。另外,当创建过程时,既可指定输入参数(IN),可指定输出参数(OUT)及输入输出参数(IN OUT)。通过在过程中使用输入参数,可以将应用环境的数据传递到执行部分通过使用输出参数,可以将执行部分的数据传递到应用环境。定义子程序参数时,如果不指定参数模式,则默认为输入参数如果要定义输出参数,指定OUT关键字;如果要定义输入输出参数,则指定IN OUT关键字。以下通过示例说明创建过程和使用各种参数模式的方法。
创建过程无参数
以下删除表中重复记录为例,说明创建该种过程的方法。假设存在表tb_test,表数据如图1.5.1所示
图1.5.1 表tb_test数据
创建一个无参过程,完成删除此表中重复记录的操作如图1.5.2。
图1.5.2 创建无参过程
创建了过程proc_del_dup_rec之后,调用该过程。在SQL*Plus环境中调用过程有两种方法使用exec命令使用call命令。图1.5.3使用exec命令调用过程proc_del_dup_rec,并显示执行效果。
图1.5.3 使用exec命令调用过程,并显示执行效果
2. 创建过程带有IN参数
创建过程时,可以通过使用输入参数,将应用程序的数据传递到过程中。当为过程定义参数时,如果不指定参数模式,默认为输入参数,另外也可使用IN关键字显式地定义输入参数。下面以查询公交线路为例,说明创建种过程的方法。假设存在表tb_station,其表数据如图1.5.4所示
图1.5.4 表tb_station数据
创建一个带有IN参数的过程proc_transit_station,用于让用户输入公交车次、起点站和终点站即可查询出中间经过的公交线路如图1.5.5
图1.5.5 创建带有IN参数过程
图1.5.5,在创建过程proc_transit_station时所有参数都没有指定参数模式,所以这些参数全部都是输入参数。当调用该过程时,除了具有默认值的参数之外,其他参数必须提供数值调用示例如图1.5.所示
图1.5. 调用带有IN参数的存储过程
3. 创建过程带有OUT参数
过程不仅可以用于执行特定操作,可以用于输出数据在过程中输出数据使用OUT或IN OUT参数来完成。当定义输出参数时,必须提供OUT关键字。以下创建用于输出雇员名及其工资的过程为例,说明创建带有OUT参数的过程的方法,如图1.5.所示
图1.5.创建带有OUT参数的存储过程
图1.5.,在创建proc_query_emp时,没有为参数param_empno指定参数模式,所以该参数是输入参数;参数param_
原创力文档

文档评论(0)