简介
存储过程是一种命名的PL/SQL代码块,存储在Oracle数据库中,可以被用户调用。
存储过程可以包含参数,一般没有返回值
存储过程是事先编译好的代码,再次调用的时候不需要重新编译,因此程序的运行效率较高。
存储过程的创建
语法格式如下:
create [or replace] procedure pro_name
(参数列表)
as
局部变量声明
begin
程序语句序列
exception
异常处理
end pro_name
-
参数列表
in
输入参数,使用username in varchar
,表示接受外部过程传递来的值。out
输出参数,使用username out varchar
,表示此参数将在过程中被复制,并传递到过程体外。in out
表示具有输入参数特性,又有输出型特性
-
参数类型不能指定长度,只需要指定数据类型即可。
-
局部变量只在过程中有效
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块中调用。
- 在SQL Plus中调用
exec pro_name(param1, param2,...);
execute pro_name(param1, param2,...);
- 在PL/SQL块中调用
不需要使用关键字exec,即可直接调用
- 存储过程的删除
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;