何为存储过程何为函数,他们区别如何?

存储过程和函数目的是为了可重复地执行操作数据库的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);

结束;

/


版权声明:本文为qq_37894319原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。