打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle存储过程

转载:http://blog.csdn.net/u013057786/article/details/17165623

1、定义
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过
编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数
来调用并执行它,从而完成一个或一系列的数据库操作。

2、存储过程的创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

(1)无参存储过程语法

create or replace procedure NoParPro   as  //声明   ;   begin // 执行   ;   exception//存储过程异常   ;   end;  

(2)带参存储过程实例

create or replace procedure queryempname(sfindno emp.empno%type)   as     sName emp.ename%type;     sjob emp.job%type;  begin         ....  exception         ....  end;

 

(3)带参数存储过程含赋值方式

create or replace procedure runbyparmeters        (isal in emp.sal%type,        sname out varchar,       sjob in out varchar)   as       icount number;   begin        select count(*) into icount from emp where sal>isal and job=sjob;        if icount=1 then          ....        else         ....       end if;  exception       when too_many_rows then       DBMS_OUTPUT.PUT_LINE('返回值多于1行');       when others then       DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');  end;  

其中参数IN表示输入参数,是参数的默认模式。
OUT表示返回值参数,类型可以使用任意Oracle中的合法类型。
OUT模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
IN OUT表示该参数可以向该过程中传递值,也可以将某个值传出去。

(4)存储过程中游标定义使用

as //定义(游标一个可以遍历的结果集)   CURSOR cur_1 IS     SELECT area_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn,           SUM(usd_amt)/10000 usd_amt_sn     FROM BGD_AREA_CM_M_BASE_T     WHERE ym >= vs_ym_sn_beg          AND ym <= vs_ym_sn_end     GROUP BY area_code,CMCODE;         begin //执行(常用For语句遍历游标)       FOR rec IN cur_1 LOOP     UPDATE xxxxxxxxxxx_T      SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn      WHERE area_code = rec.area_code      AND CMCODE = rec.CMCODE      AND ym = is_ym;   END LOOP;  

 

(5)游标的定义

--显示cursor的处理declare  ---声明cursor,创建和命名一个sql工作区cursor cursor_name is      select real_name from account_hcz;    v_realname varchar2(20);begin     open cursor_name;---打开cursor,执行sql语句产生的结果集    fetch cursor_name into v_realname;--提取cursor,提取结果集中的记录    dbms_output.put_line(v_realname);    close cursor_name;--关闭cursorend;

3、在Oracle中对存储过程的调用 

(1)过程调用方式一

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)过程调用方式二

declare       realsal emp.sal%type;       realname varchar(40);       realjob varchar(40);  begin    //过程调用开始       realsal:=1100;       realname:='';       realjob:='CLERK';       --指定值对应变量顺序可变       runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);               DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);  END;  //过程调用结束  

(3)过程调用方式三(SQL命令行方式下)

1、SQL>exec  proc_emp('参数1','参数2');//无返回值过程调用  2、SQL>var vsal number       SQL> exec proc_emp ('参数1',:vsal);// 有返回值过程调用        或者:call proc_emp ('参数1',:vsal);// 有返回值过程调用  

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
oracle 存储过程in out inout三种参数模式
sql存储过程简单实例语句
牛刀小试PLSQL编程之筑基篇
Oracle PL/SQL随堂笔记总结
jdbc调用 oracle 存储过程操作
Oracle常用知识小总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服