oracle数据库开发与应用 存储过程、函数和包 17
oracle数据库开发与应用 存储过程、函数和包 17
智汇君oracle数据库开发与应用 存储过程、函数和包 17
存储过程
存储过程的作用
1 | 以上代码,可以将一些 SQL 操作集中起来。 |
创建存储过程
1 | 存储过程用于执行某些操作,不返回任何值。其语法很简单,就是在标准PL/SQL程序块的基础上增加了一个程序头部,最简单的创建存储过程的语法如下: |
1 | 此语法是最简单的创建存储过程的语法,更加复杂的语法将在后面讲解。 |
调用存储过程
1 | 调用存储过程方法很简单,将存储过程的调用放在一个PL/SQL块中即可 |
1 | 当然,也可以放在另一个存储过程中嵌套调用 |
1 | 还有一种方法也可以调用存储过程。在PL/SQL Developer的命令窗口中,输入: |
1 | 当然,也可以使用下面语法删除存储过程 |
详解存储过程
带输入参数的存储过程
1 | 很明显,这是一个带参数的存储过程。在存储过程中,参数有两种:输入参数和输出参数。本存储过程中需要使用的是输入参数。给存储过程定义输入参数,只需要在存储过程名称的定义后面,加上参数定义即可。 |
存储过程内部的返回
1 | 在一个存储过程中,可能有非常复杂的逻辑,某些逻辑成立时,可能需要存储过程中剩下的代码中止运行。 |
带输出参数的存储过程
1 | 存储过程之所以叫做“过程”,就是因为没有返回值。即使能够返回,也只能用RETURN语句,而不能用RETURN用某个值。例如,RETURN1在Oracle 中是错误的。有时候,又必须从存储过程中获取一些值,如下面的例子。 |
1 | 运行,即创建存储过程。 |
1 | 实际上,在使用存储过程时,参数有3种引用模式IN、OUT和IN OUT。默认情况下是IN,OUT和INOUT参数必须在定义时被显式指定。IN OUT参数的使用较少。 |
函数
函数的作用
1 | 存储过程可以使用输出参数来得到一些“返回值”,但是,其使用起来有些复杂。另外,由于存储过程是一个可以独立调用PL/SQL语句,在某些特定场合,难以实现一些特定的功能。 |
创建函数
1 | 函数被用来执行复杂的计算,并返回计算的结果。其语法很简单,就是在标准PL/SQL程序块的基础上增加了一个程序头部,最简单的创建函数的语法如下: |
1 | 输入参数定义和返回类型中的VARCHAR2,不要指定宽度。否则报错。例如, |
1 | 当然,也可以放在另一个存储过程或者函数中嵌套调用。 |
1 | 当然,也可以使用下面语法删除函数: |
将函数使用到SQL语句
1 | 函数在数据库中最常见的作用是和SQL语句配合使用。在SQL语句中经常需要使用到表达式,函数在SQL语句中就作为表达式出现。 |
1 | 在SQL语句中使用函数,有如下好处: |
包
定义包
1 | 在大型项目中,希望程序能够有序组织、存储。包,提供了一个很好的工具。包,包括两个部分:包头和包体。在包头定义了包中可用的过程、函数、变量、常量的声明,在包体部分定义了包中的函数、过程的实际PL/SQL代码。 |
定义包头
1 | CREATE OR REPLACE PACKAGE 包名 |
1 | 例:定义一个包PKG_SCHOOL,内含一个变量STUCOUNT,一个存储过程PRC_GETSTUCOUNT. |
1 | 运行,即创建包。在PL/SQL Developer 的树形目录中可以看到,如图17-14所示。 |
1 | 注意 |
定义包体
1 | 包体部分定义了包中的函数、过程的实际PL/SQL代码:定义包体的语法如下: |
1 | 注意 |
使用包
1 | 将存储过程或函数放入包中,只需要用“包名.过程/函数名”的方法即可调用包中的存储过程或者函数。 |























