Oracle存储过程以及游标
一.存储过程
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表示该参数可以向该过程中传递值,也可以将某个值传出去。
二.游标
1.游标概念
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
2.游标作用
概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。 游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。 大部分程序数据设计语言都能使用游标来检索SQL数据库中的数据,在程序中嵌入游标和在程序中嵌入SQL语句相同 。
1)存储过程游标定义使用:
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;
2)游标定义
--显示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;--关闭cursor
end;
三.在Oracle中对存储过程的调用使用
1)调用 方式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) 调用方式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)调用方式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);// 有返回值过程调用
Oracle存储过程以及游标相关推荐
- oracle存储过程游标调用,oracle存储过程调用游标例子-Oracle
oracle存储过程调用游标例子. 1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t ...
- oracle中创建游标,oracle 存储过程创建游标
Oracle与Sql Server差异点详解 1.create函数或存储过程异同点 Oracle 创建函数或存储过程一般是 create or replace -- SQL SERVER 则是在创建之 ...
- Oracle存储过程以及游标嵌套实际使用
Oracle数据库,存储过程以及游标嵌套实际使用 Oracle对存储过程嵌套游标的使用 这学期新开的Oracle的课程,但是无奈课本是很浅显的东西,内容比较少,以至于老师布置的作业有一些难度,需要参考 ...
- java调用oracle 存储过程 以及游标使用
打开 PLSQL 创建一张:如果你没有PLSQL 找我 -- Create table create table T_QUN_STUDY ( T_ID NUMBER not null ...
- 小青蛙oracle跟踪,Oracle 存储过程:游标
一.认识游标 什么是游标?游标是数据库的一种数据类型,它用来管理从数据源(表,视图等)获取到的数据结果集,可以想象成一个游动的光标(指针),指向一个结果集,通过游标的移动逐行提取每一行的记录,就像我们 ...
- vb.net调用oracle存储过程,今天搞好了VB.NET调用Oracle存储过程返回游标的问题
代码: Public Function GetData(ByVal procDate As String) As ArrayListTry Dim conn As New Oracle.DataAcc ...
- oracle存储过程调用游标例子
1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t_cur is REF CUR ...
- Oracle存储过程 使用游标、数组的配合查询
查询输入的门牌号码是否在标准门牌库中存在.存在则返回相应的号码. 1 public string GetValidate(){ 2 3 OracleConnection conn = ConnectO ...
- Oracle存储过程返回游标实例详解
复制代码 代码如下: CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHA ...
最新文章
- C++模板类注意事项
- Android开发之 当前日期String类型转date类型 java代码中实现方法
- CAD安装失败怎样卸载重新安装CAD,解决CAD安装失败的方法总结
- sed 中如何替换换行符
- wordpress插件制作
- Supervisor 守护 dotnetcore 程序
- 搞定所有的跨域请求问题
- mysql中使用CASE WHEN
- 项目经济规模的估算方法_估算英国退欧的经济影响
- 亚马逊警用刷脸计划小小受阻,但原因并不是贝佐斯妥协
- 2021 年百度之星·程序设计大赛 - 初赛二 1005 水题(贪心结论)
- 解决VST插件无法加载之sam音架的配置
- 【硬件工程师】元器件选型都不会?
- 查看浏览器保存的密码
- dhtml(灯火通明类似的词语)
- 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
- 医疗器械行业迎来黄金十年,集团采购系统助力企业把握机遇,实现高质量发展
- Data Catalog3.0:Modern Metadata for the Modern Data Stack
- Mac 使用Charles后,退出Charles后,不能浏览网页,提示:未连接到互联网代理服务器出现问题,或者地址有误。
- Swift中键盘的弹出隐藏,页面抬高,Return键等的配置