oracle存储过程

简介

存储过程是一种命名的PL/SQL代码块,存储在Oracle数据库中,可以被用户调用。

存储过程可以包含参数,一般没有返回值

存储过程是事先编译好的代码,再次调用的时候不需要重新编译,因此程序的运行效率较高。

存储过程的创建

语法格式如下:

create [or replace] procedure pro_name
(参数列表)
as
局部变量声明
begin
  程序语句序列
  exception
  异常处理
end pro_name
  1. 参数列表

    • in 输入参数,使用 username in varchar,表示接受外部过程传递来的值。
    • out 输出参数,使用username out varchar,表示此参数将在过程中被复制,并传递到过程体外。
    • in out 表示具有输入参数特性,又有输出型特性
  2. 参数类型不能指定长度,只需要指定数据类型即可。

  3. 局部变量只在过程中有效

e.g

create or replace PROCEDURE p_insert_aa
(username in varchar, age in number)
IS
idn number(30);
BEGIN
select aa_id.nextval into idn from dual;
insert into aa(id,username, age, createman,createdate)
values (idn, username, age, 'admin', sysdate);
commit;
end p_insert_aa;

存储过程的调用和删除

存储过程可以在 SQL Plus或PL/SQL块中调用。

  1. 在SQL Plus中调用
exec pro_name(param1, param2,...); 
execute pro_name(param1, param2,...); 

sql plus安装

  1. 在PL/SQL块中调用

不需要使用关键字exec,即可直接调用

  1. 存储过程的删除
drop procedure pro_name;

查询

procedure M_SP_QUERYTODAYSUTTLE (WEIGHID_VAR in varchar2,DATASET_CUR_VAR out dataset_cur) as
   cur_var sys_refcursor;
     begin
       open cur_var for
         SELECT t.heatname, t.kettle_no, t.gross,
                to_char(t.grosstime, 'mm-dd hh24:mi:ss') as grosstime, t.tare,
                to_char(t.taretime, 'mm-dd hh24:mi:ss') as taretime, t.dross,
                t.suttle,
                to_char(t.suttletime, 'mm-dd hh24:mi:ss') as suttletime,
                t.grossweighname,
                to_number(substr(t.sequence_no,
                                  length(t.sequence_no) - 5 + 1,
                                  5)) as sequence_no, t.materialname,
                t.sourcecode, t.sourcename, t.targetcode, t.targetname
           FROM MSR_IRON_V t
          WHERE (T.SUTTLE > 0)
            and (T.validflag = 1)
            and (t.grosstime >=
                to_date(to_char(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd'))
            and (t.grossweighid = weighid_var)
          ORDER BY suttletime desc;
       dataset_cur_var := cur_var;
     end;
原文地址:https://www.cnblogs.com/zhuxiang1633/p/13933329.html