存储过程和函数目的是为了可重复地执行操作数据库的sql语句的集合。
区别是写法和调用上。
写法上:存储过程的参数列表可以有输入参数,输出参数,可输入输出的参数;
函数的参数列表只有输入参数,并且有返回<返回值类型,无长度说明>。
返回值上:
存储过程的返回值,可以有多个值,
函数的返回值,只有一个值。
调用方式上:
存储过程的调用方式有:
1),exec <过程名>;
2),执行<过程名>;
3)中,在PL / SQL语句块中直接调用。
函数的调用方式有:
在PL / SQL语句块中直接调用。
具体分为:
----调用功能add_three_numbers
---- 1。位置表示法调用函数
开始
DBMS_OUTPUT.PUT_LINE(add_three_numbers(2,4,5-));
结束;
---- 2。命名表示法调用函数
开始
dbms_output.put_line(add_three_numbers(b => 3,a => 4,c => 2));
结束;
---- 3。混合使用位置表示法和命名表示法调用函数
开始
dbms_output.put_line(add_three_numbers(3,b => 4,c => 2));
结束;
---- 4。排除表示法
开始
DBMS_OUTPUT.PUT_LINE(add_three_numbers(12,C => 2));
结束;
---- 5。sql调用表示法 - 混合表示法
SELECT add_three_numbers(3,b => 4,c => 2)FROM DUAL;
---- 1。该函数接受3个可选参数,返回3个数字的和
创建或替换函数add_three_numbers
(
NUMBER:= 0,b NUMBER:= 0,c NUMBER:= 0
)
返回号码是
开始
返回a + b + c;
结束;
存储过程:
基本语法:
create procedure <过程名>(<参数列表,无参时忽略>)
因为|是
变量声明,初始化
开始
业务处理,逻辑代码
例外
异常捕获,容错处理
结束<过程名>;
参数:<参数名> in | out | in out <参数类型,无长度说明>,如:v_name varchar2
在:入参
出:出参
in out:出入参
注:因为|是表示为或为
调用语法:
1),exec <过程名>;
2),执行<过程名>;
3)中,在PL / SQL语句块中直接调用。
例:
创建或替换过程up_wap(out varchar2中的v_param1,输出varchar2中的v_param2)
是
v_temp varchar2(20);
开始
dbms_output.put_line('交换前参数1:'|| v_param1 ||'参数2:'|| v_param2);
v_temp:= v_param1;
v_param1:= v_param2;
v_param2:= v_temp;
dbms_output.put_line('交换后参数1:'|| v_param1 ||'参数2:'|| v_param2);
例外
当其他人然后dbms_output.put_line('程序up_wap执行时出错!');
结束up_wap;
/
- 调用存储过程
宣布
v_param1 varchar2(20):='param1';
v_param2 varchar2(20):='param2';
开始
up_wap(v_param1 => v_param1,v_param2 => v_param2);
结束;
/
自定义函数(功能)
基本语法:
创建函数<函数名>(<参数列表,无参时忽略>)
return <返回值类型,无长度说明>
因为|是
变量声明,初始化
开始
业务处理,逻辑代码
return <返回的值>;
例外
异常捕获,容错处理
结束<函数名>;
参数:in入参
注:只有入参的类型。
在存储过程和自定义函数中的参数的传递(入参和出参)不能使用类型%或%行类型匹配,不能使用空值零,但是存储过程可以返回空值。
例:
create function uf_select_name_by_id_test(v_id in number)
return varchar2
是
v_name t_test.t_name%type;
开始
从t_test中选择t_name到v_name,其中t_id = v_id;
return v_name;
例外
当其他人然后dbms_output.put_line('error');
结束uf_select_name_by_id_test;
/
从双重中选择uf_select_name_by_id_test(1)姓名; - 选择调用
declare --pl / sql 语句块调用
v_name varchar2(20);
开始
v_name:= uf_select_name_by_id_test(1);
dbms_output.put_line('name ='|| v_name);
结束;
/