设为首页 加入收藏

TOP

Oracle 11g基础学习---(5) 开发子程序和包(一)
2014-11-23 23:34:12 来源: 作者: 【 】 浏览:13
Tags:Oracle 11g 基础 学习 --- 开发 子程序

学习Oracle从哪里入手呢,在这里,我将带你走进Oracle的大门,一天一章,7天入门不是梦

1. 开发子程序

子程序是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用中多次调用

PL/SQL有两种类型的子程序:过程和函数

过程用于执行特定操作,而函数则用于返回特定数据

通过将商业逻辑和企业规则集成到PL/SQL子程序中,可以简化客户端应用的开发和维护,提高应用的性能

1. 1 开发过程

1.1 开发过程

过程一般用于执行一个指定的操作,可以将常用的特定操作封装成过程

开发过程

CREATE [OR REPLACE] PROCEDURE procedure_name

(argument1 [mode1] datatype1, argument2 [mode2] datatype2, ...)

IS [AS]

声明部分

BEGIN

执行部分

EXCEPTION

异常处理部分

END;

创建过程:无参数

开发过程

创建过程:带有IN参数

当为过程定义参数时,如果不指定参数模式,则默认为输入参数

开发过程

创建过程:带有OUT参数

过程不仅可以用于执行特定操作,还可以用于输出数据

在过程中输出数据时,需要使用OUT或IN OUT参数来完成

开发过程

创建过程:带有IN OUT参数

创建过程时,不仅可以指定IN和OUT参数,也可以指定IN OUT参数

IN OUT参数也称为输入输出参数,当使用这种参数时,在调用过程之前需要通过变量给该种参数传递数据,调用结束后,Oracle会通过该变量将过程结果传递给应用

1.2 在调用过程时为参数传递变量和数据

为形参传递变量和数据可以采用

位置传递

名称传递

组合传递

在调用过程时为参数传递变量和数据

按位置传递

按位置传递是指在调用时按参数的排列顺序依次写出实参的名称,将形参与实参关联起来进行传递

在这种方法中,形参与实参的名称是相互独立、没有关系的,次序才重要

它比按名称传递方法在书写上简单,但如果更新了一个过程的形参的次序,则对应该过程的所有调用都必须进行相应的更新,所以会增加维护应用程序的难度

在调用过程时为参数传递变量和数据

按名称传递

按名称传递是指在调用时按照形参与实参的名称写出实参所对应的形参,将形参与实参关联起来进行传递

在这种方法中,形参与实参的名称是相互独立、没有关系的,名称的对应关系很重要,但次序不重要

它比按位置传递方法在书写上要复杂,但如果只更新了一个过程的形参的次序,则不需要对该过程的任何调用进行任何更新

但如果更新了一个过程的形参的名称,则对该过程的所有调用都必须进行相应的更新,所以会增加维护应用程序的难度

名称传递在调用子程序时指定参数名,并使用关联符号“=>”为其提供相应的数值或变量

在调用过程时为参数传递变量和数据

组合传递

根据应用的需要,可以将按位置传递、按名称传递两种方法在同一调用中混合使用

但前面的实参必须使用按位置传递方法,而后面其余的实参则可以使用按名称传递的方法

1.3 开发函数

函数用于返回特定数据,如果在应用程序中经常需要通过执行SQL语句来返回特定数据,则可以基于这些操作创建特定的函数

通过使用函数,不仅可以简化客户端应用程序的开发和维护,还可以提高应用程序的执行性能

CREATE [OR REPLACE] FUNCTION function_name

(argument1 [model] datatype1,

argument2 [mode2] datatype2,

...)

RETURN datatype

IS|AS

声明部分

BEGIN

执行部分

EXCEPTION

异常处理部分

END;

开发函数

创建函数:不带任何参数

开发函数

创建函数:带有IN参数

当创建函数时,通过使用输入参数,可以将应用的数据传递到函数中,最终通过执行函数可以将结果返回到应用程序中

当定义参数时,如果不指定参数模式,则默认为输入参数

开发函数

创建函数:带有OUT参数

一般情况下,函数只需要返回单个数据。如果希望使用函数时返回多个数据(如同时返回雇员名和工资),则可以使用OUT输出参数来实现此功能

开发函数

创建函数:带有IN OUT参数

与创建过程类似,创建函数时也可以指定IN OUT参数

1.4 过程与函数的比较

过程与函数有许多相同的功能及特性

都使用IN模式的参数传入数据、OUT模式的参数返回数据

输入参数都可以接收默认值,都可以传值

调用时的实参都可以使用位置表示法或名称表示法

都有声明部分、执行部分和异常处理部分

一般而言,如果需要返回多个值或不返回值,就使用过程

如果只需要返回一个值,就使用函数

虽然函数带OUT模式的参数也能返回多个值,但是一般都认为这种方法属于不好的编程习惯或风格

过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值

1.5 管理子程序

查看子程序的源码

通过查询数据字典USER_SOURCE,可显示当前用户的所有子程序及其源代码

列出当前用户的子程序

数据字典视图USER_OBJECTS用于显示当前用户所包含的所有对象

列出子程序编译错误

使用SHOW ERRORS命令确定错误出现错误的位置及原因

列出对象依赖关系

创建存储对象(过程、函数、包、视图、触发器)时,往往需引用其他对象

当修改了被引用对象的结构时,都会使得相关依赖对象转变为INVALID状态

可以使用数据字典视图USER_DEPENDENCIES确定直接依赖关系

重新编译子程序

当修改了被引用对象的结构后,会将相关依赖对象转变为INVALID状态

为了避免调用的失败,在更新表的结构后,应该重新编译依赖于它的对象

2. 开发包

2.1 创建包

包(Package)用于组合逻辑相关的PL/SQL类型、PL/SQL项和PL/SQL子程序

通过使用PL/SQL包,不仅可以简化应用设计,提高应用性能,还可以实现信息隐藏、子程序重载等功能

包由包规范和包体两部分组成

当创建包时,需要首先创建包规范,然后再创建包体

创建包规范

包规范是包与应用程序之间的接口,用于定义包的公用组件,包括常量、变量、游标、过程和函数

在包规范中所定义的公用组件不仅可以在包内引用,而且还可以由其他的子程序引用

创建包规范时需要注意的是:为了实现信息隐藏,不应该将所有组件全部放在包规范处定义,而应该只定义公用组件

CREATE [OR REPLACE] PACKAGE package_name

IS|AS

public type and item declarations

subprogram specifications

END package_name;

创建包规范

创建包体

为了实现包规范中所定义的公用过程和函数,必须创建包体

包体用于实现包规范所定义的过程和函数

在创建包时,为了实现信息隐藏,应该在包体内定义私有组件

CREATE [OR REPLACE

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle11gSGA调整方法 下一篇Oracle11g的导入与导出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: