Oracle存储过程和函数(材料来源于互联网)

       ORACLE编写的程序一般分为两类,一种是可以完成一定功能的程序叫存储过程;另一种就是在使用时给出一个或多个值,处理完后返回一个或多个结果的程序叫函数。这两种程序都存放在Oracle数据库字典中。下面分别介绍这两种程序的编写方法。

 

ORACLE提供可以把PL/SQL程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。在本节中,主要介绍:

1.创建存储过程和函数

2.正确使用系统级的异常处理和用户定义的异常处理

3.建立和管理存储过程和函数

 

 创建过程语法:   

存储过程:

与其它的数据库系统一样,Oracle的存储过程是用PL/SQL语言编写的能完成一定处理功能的存储在数据库字典中的程序。

 

创建过程:

建立内嵌过程

oracle server上建立内嵌过程,可以被多个应用程序调用,可以向内嵌过程传递参数,也可以向内嵌过程传回参数.

create [or replace] procedure  procedure_name
   [ (argment [ { in| in  out }]  type,
     argment  [ { in | out | in out } ] type
   { is  | as }
   <类型.变量的说明>
  ( 注:  不用 declare 语句 )
<执行部分>  
Begin
    exception
     <可选的异常处理说明>
end;


 

 

注意: 

l.  这里的IN表示向存储过程传递参数,OUT表示从存储过程返回参数。而IN OUT 表示传递参数和返回参数;

2.  存储过程内的变量类型只能指定变量类型;不能指定长度

3.  ASIS后声明要用到的变量名称和变量类型及长度

4.  ASIS后声明变量不要加declare语句。

 

CREATE OR REPLACE PROCEDURE ModeTest(

  p_InParameter    IN NUMBER,

  p_OutParameter   OUT NUMBER,

  p_InOutParameter IN OUT NUMBER    )

 IS

  v_LocalVariable  NUMBER;

 

BEGIN

 /* 分配 p_InParameter给 v_LocalVariable. */

 v_LocalVariable := p_InParameter;  -- Legal

 

 /* 分配 7 给 p_InParameter. 这是非法的,因为声明是IN */

 p_InParameter := 7;  -- Illegal

 

  /* 分配 7 给 p_OutParameter. 这是合法的,因为声明是OUT */

 p_OutParameter := 7;  -- Legal

 

 /* 分配 p_InOutParameter给 v_LocalVariable.这是合法的,因为声明是IN OUT */

 v_LocalVariable := p_InOutParameter;  -- Legal

 

 /*分配 7 给 p_InOutParameter.这是合法的,因为声明是IN OUT */

 p_InOutParameter := 7;  -- Legal

 

END ModeTest;

/


 

使用过程

存储过程建立完成后,只要通过授权,用户就可以在SQLPLUSOracle开发工具或第三方开发工具来调用运行。Oracle使用EXECUTE语句来实现对存储过程的调用。

EXEC[UTE]  procedure_name( parameter1, parameter2…);--我实在是看不出来跟SQL有啥区别

-----------------------------------------------------------------------------------------------------------------------

先声明包,以及包里面存在的函数 过程等等

-----------------------------------------------------------------------------------------------------------------------

 

CREATE OR REPLACE PACKAGE 包名

AS

PROCEDURE  Bird(

     参数1 参数类型.......

     id number,---根据编号查询

     result OUT SYS_REFCURSOR

); --注意分号

END 包名

/          --不要问我为什么要加个"/",我也不知道ORACLE这么会有这么BT的规定


-------------------------------------------------------------------------------------------------------------------------

下面才是重头戏......哇嘎嘎

-------------------------------------------------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE BODY 包名
AS

Procedure  Bird(

     id number,

     result OUT SYS_REFCURSOR

)

IS

    BEGIN

           open result for

            select   StuId,name,sex,grade  from StuInfo where StuId = id

    END Bird;

/


 

个人感觉存储过程比函数要好得多,尤其是在执行大量数据的时候,对数据表的操作就是增删改查,建议直接使用存储过程,节约代码,便于修改。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值