Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的。相对来说,数据库系统中的触发器也是一种存储过程。存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度。在大型数据库系统如Oracle、SQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程。
   所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

Oracle存储过程可以有无参数存储过程和带参数存储过程。 
、无参程序过程语法

1  create  or  replace  procedure  NoParPro
2  as   ;
3  begin
4  ;
5  exception     //存储过程异常
6      ;
7  end ;
8 

        二、带参存储过程实例

 1  create  or  replace  procedure  queryempname(sfindno emp.empno % type)  as
 2         sName emp.ename % type;
 3         sjob emp.job % type;
 4  begin
 5         ....
 7  exception
          ....
14  end ;
15 

    三、 带参数存储过程含赋值方式
 1  create  or  replace  procedure  runbyparmeters  (isal  in  emp.sal % type,
                            sname out 
varchar ,sjob  in  out  varchar )
 2   as  icount  number ;
 3   begin
 4         select  count ( * into  icount  from  emp  where  sal > isal  and  job = sjob;
 5         if  icount = 1  then
 6          ....
 9         else
10          ....
12         end  if ;
13   exception
14         when  too_many_rows  then
15        DBMS_OUTPUT.PUT_LINE( ' 返回值多于1行 ' );
16         when  others  then
17        DBMS_OUTPUT.PUT_LINE( ' 在RUNBYPARMETERS过程中出错! ' );
18   end ;
19 

  四、在Oracle中对存储过程的调用
  过程调用方式一
 1  declare
 2         realsal emp.sal % type;
 3         realname  varchar ( 40 );
 4         realjob  varchar ( 40 );
 5   begin   //存储过程调用开始
 6         realsal: = 1100 ;
 7         realname: = '' ;
 8         realjob: = ' CLERK ' ;
 9         runbyparmeters(realsal,realname,realjob);     -- 必须按顺序
10         DBMS_OUTPUT.PUT_LINE(REALNAME || '     ' || REALJOB);
11   END ;  //过程调用结束
12 

  过程调用方式二
 1  declare
 2        realsal emp.sal % type;
 3        realname  varchar ( 40 );
 4        realjob  varchar ( 40 );
 5  begin    //过程调用开始
 6        realsal: = 1100 ;
 7        realname: = '' ;
 8        realjob: = ' CLERK ' ;
 9        runbyparmeters(sname => realname,isal => realsal,sjob => realjob);  -- 指定值对应变量顺序可变
10        DBMS_OUTPUT.PUT_LINE(REALNAME || '     ' || REALJOB);
11  END ;  //过程调用结束
12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值