oracle存储过程是什么,oracle存储过程详解
1、定义
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
2、存储过程的创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
(1)无参存储过程语法
1 2 3 4 5 6 7 8 | createorreplaceprocedureNoParPro as//声明 ; begin// 执行 ; exception//存储过程异常 ; end; |
(2)带参存储过程实例
1 2 3 4 5 6 7 8 9 | createorreplaceprocedurequeryempname(sfindno emp.empno%type) as sName emp.ename%type; sjob emp.job%type; begin .... exception .... end; |
(3)带参数存储过程含赋值方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | createorreplaceprocedurerunbyparmeters (isal inemp.sal%type, sname outvarchar, sjob inoutvarchar) as icount number; begin selectcount(*) intoicount fromemp wheresal>isal andjob=sjob; if icount=1 then .... else .... endif; exception whentoo_many_rows then DBMS_OUTPUT.PUT_LINE('返回值多于1行'); whenothers then DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!'); end; |
其中参数IN表示输入参数,是参数的默认模式。
OUT表示返回值参数,类型可以使用任意Oracle中的合法类型。
OUT模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
IN OUT表示该参数可以向该过程中传递值,也可以将某个值传出去。
(4)存储过程中游标定义使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | as//定义(游标一个可以遍历的结果集) CURSORcur_1 IS SELECTarea_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn, SUM(usd_amt)/10000 usd_amt_sn FROMBGD_AREA_CM_M_BASE_T WHEREym >= vs_ym_sn_beg ANDym <= vs_ym_sn_end GROUPBYarea_code,CMCODE; begin//执行(常用For语句遍历游标) FORrec INcur_1 LOOP UPDATExxxxxxxxxxx_T SETrmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn WHEREarea_code = rec.area_code ANDCMCODE = rec.CMCODE ANDym = is_ym; ENDLOOP; |
(5)游标的定义
1 2 3 4 5 6 7 8 9 10 11 12 | --显示cursor的处理 declare ---声明cursor,创建和命名一个sql工作区 cursorcursor_name is selectreal_name fromaccount_hcz; v_realname varchar2(20); begin opencursor_name;---打开cursor,执行sql语句产生的结果集 fetchcursor_name intov_realname;--提取cursor,提取结果集中的记录 dbms_output.put_line(v_realname); closecursor_name;--关闭cursor end; |
3、在Oracle中对存储过程的调用(1)过程调用方式一
1 2 3 4 5 6 7 8 9 10 11 | declare realsal emp.sal%type; realname varchar(40); realjob varchar(40); begin//过程调用开始 realsal:=1100; realname:=''; realjob:='CLERK'; runbyparmeters(realsal,realname,realjob);--必须按顺序 DBMS_OUTPUT.PUT_LINE(REALNAME||' '||REALJOB); END; //过程调用结束 |
(2)过程调用方式二
本文地址:百科问答频道 https://www.neebe.cn/wenda/930785.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!