oracle - procedure

create or replace procedure procedure_name as
create or replace procedure procedure_name is

以上是一样的

 

存储过程

  1  CREATE OR REPLACE PROCEDURE 存储过程名

   IS

   BEGIN

  4  NULL;

   END;

 

行1:

  CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;

行2:

  IS关键词表明后面将跟随一个PL/SQL体。

行3:

  BEGIN关键词表明PL/SQL体的开始。

行4:

  NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;

行5:

  END关键词表明PL/SQL体的结束

 

 

 

存储过程创建语法:

 create or replace procedure 存储过程名(param1 in typeparam2 out type) 

as 

变量1 类型(值范围); --vs_msg   VARCHAR2(4000); 

变量2 类型(值范围);

Begin

Select count(*) into 变量1 from 表A where列名=param1

 

    If (判断条件) then

       Select 列名 into 变量2 from 表A where列名=param1

       Dbms_outputPut_line(‘打印信息’);

    Elsif (判断条件) then

       Dbms_outputPut_line(‘打印信息’);

    Else

       Raise 异常名(NO_DATA_FOUND;

    End if;

Exception

    When others then

       Rollback;

End;

 

实际应用:

带输入,输出参数

procedure agentbrokerbakup(i_yearmonth in varchar2,
                             i_branchid  in varchar2,
                             i_userid    in varchar2,
                             o_outres    out varchar2) is
    p_count    number(10, 5);
    p_resvalue number(10, 5);
  begin

   null

end;

跟程序语言中的方法一样,有输入,输出参数,有局部变量,i_xxx为输入参数,o_xxx为输出参数,p_xxx为局部变量,不需return语句

不带输入输出参数

procedure test is
      begin
        update persist_test1 a set a.ac04='驻马店营业部 ' where a.ac06='8016922';
        end;

 

 

注意事项:

1, 存储过程参数不带取值范围,in表示传入(只能位于等号右边),out表示输出(只能位于等号左边),in out表示该类型既能被赋值也能传值;

类型可以使用任意Oracle中的合法类型。

2,  变量带取值范围,后面接分号

3,  在判断语句前最好先用count(*)函数判断是否存在该条操作记录

4,  用select 。。。into。。。给变量赋值

5,  在代码中抛异常用 raise+异常名

6,  用select时,后面必须接into字段,在游标和循环里面就另当别论了

7,在package里,不能create or replace

8,不写in,out,默认为in

posted on 2012-05-25 12:14  lovebeauty  阅读(2464)  评论(0编辑  收藏  举报

导航