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

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

结束;

/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

度白白

提前收摊,今晚加鸡腿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值