Oracle11g基础学习---------(5) 开发子程序和包

来源:互联网 发布:淘宝延长收货还有问题 编辑:程序博客网 时间:2024/06/14 19:27
 学习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_nameIS|ASpublic type and item declarationssubprogram specificationsEND package_name;创建包规范创建包体为了实现包规范中所定义的公用过程和函数,必须创建包体 包体用于实现包规范所定义的过程和函数 在创建包时,为了实现信息隐藏,应该在包体内定义私有组件   CREATE [OR REPLACE] PACKAGE BODY package_nameIS | ASprivate type and item declarationssubprogram bodiesEND package_name;2.2 调用包的组件对于包的私有组件,只能在包内调用,并且可以直接调用 而对于包的公用组件,既可以在包内调用,又可以在其他应用中调用 在同一包内调用包的组件 在调用同一包内的其他组件时,可以直接调用,不需要添加包名作为前缀 调用包的公用变量 当在其他应用中调用包的公用变量时,必须在公用变量名前添加包名作为前缀 调用包的公用过程 当在其他应用中调用包的公用过程时,必须在公用过程名前添加包名作为前缀 调用包的公用函数 当在其他应用中调用包的公用函数时,需要在函数名前添加包名作为前缀 以其他用户身份调用包的公用组件当以其他用户身份调用包的公用组件时,必须为用户赋予能够执行包的权限,并且必须以“用户名.包名.组件名”的语法格式来调用2.3 管理包查看包源代码通过查询数据字典USER_SOURCE,可以显示当前用户的包及其源代码删除包如果只删除包体,则可以使用DROP PACKAGE BODY命令如果同时删除包规范和包体,则可以使用DROP PACKAGE命令 总结子程序是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用中多次调用。PL/SQL有两种类型的子程序:过程和函数过程一般用于执行一个指定的动作函数一般用于计算和返回一个值子程序使用IN模式的参数传入数据、OUT模式的参数返回数据IN OUT参数也称为输入输出参数,它在调用过程之前需通过变量给参数传递数据,在调用结束之后,Oracle会通过该变量将过程结果传递给应用为形参传递变量和数据可以采用位置传递、名称传递和组合传递3种方法可以在SQL语句内部调用函数来完成复杂计算问题,但不能调用过程包(Package)用于逻辑组合相关的PL/SQL类型、PL/SQL项和PL/SQL子程序包由包规范和包体两部分组成。当创建包时,需要首先创建包规范,然后再创建包体

 
原创粉丝点击