比较项目 | 存储过程 | 函数 |
---|---|---|
是否有返回值 | 可以有,也可以没有 | 必须有且只有一个 |
是否可以单独执行 | 可以 | 必须通过execute执行 |
SQL语句(DML或SELECT)可否调用 | 不可以 | 可以,且可以位于FROM关键字的后面(由于可以返回表对象) |
参数类型 | 可以使用IN、OUT、IN OUT三种模式的参数 | 只有IN,Oracle可以使用IN、OUT、IN OUT三种参数 |
返回值类型 | 可以通过OUT、IN OUT参数返回零个或多个参数值 | 单一值或一个表对象 |
1)一般来说,存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。
2)存储过程一般是作为一个独立的部分来执行(参照下面“存储过程-调用方法”),而函数可以作为查询语句的一个部分来调用(用在select后面,或者from后面)。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。存储过程经过语法检查和编译的SQL语句,所以执行速度比普通的SQL语句的执行速度快。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
create procedure <过程名>(<参数列表,无参时忽略>)
as|is
变量声明、初始化
begin
业务处理、逻辑代码
exception
异常捕获、容错处理
end <过程名>;
参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2
in:入参
out:出参
in out:出入参
注:as|is表示as或is
调用语法:
1)exec <过程名>;
2)execute <过程名>;
3)对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle)
数据库中的函数包括内置函数和自定义函数,内置函数是诸如SUM(),COUNT(),AVG()等数据库内置的函数。一般我们编写的函数都属于自定义函数。
create function <函数名>(<参数列表,无参时忽略>)
return <返回值类型,无长度说明>
as|is
变量声明、初始化
begin
业务处理、逻辑代码
return <返回的值>;
exception
异常捕获、容错处理
end <函数名>;
参数:in 入参
注:只有入参的类型。
1)在SQL语句(DML或SELECT)中调用函数
2)对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle)
触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行;
原文地址:http://blog.csdn.net/kingzone_2008/article/details/44531561