Oracle中function和procedure的区别:
1). 可以理解函数是存储过程的一种
2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
4). 在sql数据操纵语句中只能调用函数而不能调用存储过程
函数语法:
create or replace function [functionName] (
/* 入参定义,只需要指定数据类型 */
[inParamName_1] in [inParamType_1],
[inParamName_2] in [inParamType_2],
[inParamName_3] in [inParamType_3],
...)
return [returnType] as
/* 临时变量定义,数据类型与长度 */
[localViriableName_1] [localViriableType-1];
[localViriableName_2] [localViriableType-2];
[localViriableName_3] [localViriableType-3];
...
begin
/* 逻辑处理SQL,类似于java代码 */
end;
调用方法:
select [functionName](inParam_1,inParam_2,inParam_3...) from dual;
存储过程语法
create or replace procedure [functionName] (
/* 入参定义,只需要指定数据类型 */
[inParamName_1] in [inParamType_1],
[inParamName_2] in [inParamType_2],
[inParamName_3] in [inParamType_3],
...,
[outParamName_1] out [outParamType_1],
[outParamName_2] out [outParamType_2],
[outParamName_3] out [outParamType_3],
) as
/* 临时变量定义,数据类型与长度 */
[localViriableName_1] [localViriableType-1];
[localViriableName_2] [localViriableType-2];
[localViriableName_3] [localViriableType-3];
...
begin
/* 逻辑处理SQL,类似于java代码 */
end;
调用方法:
declare
/* 出参临时变量个数与存储过程出参个数保持相同 */
[localOutViriableName_1] [localOutViriableType-1];
[localOutViriableName_2] [localOutViriableType-2];
[localOutViriableName_3] [localOutViriableType-3];
...
begin
/* 存储过程出参已赋值给临时出参变量 */
[procedureName](inParam_1,inParam_2,inParam_3,...,localOutViriableName_1,localOutViriableName_2,localOutViriableName_3,...);
end;