Ref Cursor
来源:互联网 发布:linux avi播放器 编辑:程序博客网 时间:2024/05/16 15:16
REF CURSOR Overview
1,什么是 REF游标?
动态关联结果集的临时对象。即在运行的时候动态决定执行查询。
2,REF 游标 有什么作用?
实现在程序间传递结果集的功能,利用REF CURSOR也可以实现BULK SQL,从而提高SQL性能。
3,静态游标和REF 游标的区别是什么?
①静态游标是静态定义,REF 游标是动态关联;
②使用REF 游标需REF 游标变量。
③REF 游标能做为参数进行传递,而静态游标是不可能的。
4,什么是REF 游标变量?
REF游标变量是一种 引用 REF游标类型 的变量,指向动态关联的结果集。
5,怎么使用 REF游标?
①声明REF 游标类型,确定REF 游标类型;
⑴强类型REF游标:指定retrun type,REF 游标变量的类型必须和return type一致。
语法:Type REF游标名 IS Ref Cursor Return 结果集返回记录类型;
⑵弱类型REF游标:不指定return type,能和任何类型的CURSOR变量匹配,用于获取任何结果集。
语法:Type REF游标名 IS Ref Cursor;
②声明Ref 游标类型变量;
语法:变量名 已声明Ref 游标类型;
③打开REF游标,关联结果集 ;
语法:Open Ref 游标类型变量 For 查询语句返回结果集;
④获取记录,操作记录;
语法:Fatch REF游标名 InTo 临时记录类型变量或属性类型变量列表;
⑤关闭游标,完全释放资源;
语法:Close REF游标名;
例子:强类型REF游标
Declare
Type MyRefCurA IS REF CURSOR RETURN emp%RowType;
Type MyRefCurB IS REF CURSOR RETURN emp.ename%Type;
vRefCurA MyRefCurA;
vRefCurB MyRefCurB;
vTempA vRefCurA%RowType;
vTempB vRefCurB.ename%Type;
Begin
Open vRefCurA For Select * from emp Where SAL > 2000;
Loop
Fatch vRefCurA InTo vTempA;
Exit When vRefCurA%NotFound;
DBMS_OUTPUT.PUT_LINE(vRefCurA%RowCount||' '|| vTempA.eno||' '||vTempA.ename ||' '||vTempA.sal)
End Loop;
Close vRefCurA;
DBMS_OUTPUT.PUT_LINE('-------------------------------------------------------------------------------------------------------');
Open vRefCurB For Select ename from emp Where SAL > 2000;
Loop
Fatch vRefCurB InTo vTempB;
Exit When vRefCurB%NotFound;
DBMS_OUTPUT.PUT_LINE(vRefCurB%RowCount||' '||vTempB)
End Loop;
Close vRefCurB;
DBMS_OUTPUT.PUT_LINE('-------------------------------------------------------------------------------------------------------');
Open vRefCurA For Select * from emp Where JOB = 'CLERK';
Loop
Fatch vRefCurA InTo vTempA;
Exit When vRefCurA%NotFound;
DBMS_OUTPUT.PUT_LINE(vRefCurA%RowCount||' '|| vTempA.eno||' '||vTempA.ename ||' '||vTempA.sal)
End Loop;
Close vRefCurA;
End;
例子:弱类型REF游标
Declare
Type MyRefCur IS Ref Cursor;
vRefCur MyRefCur;
vtemp vRefCur%RowType;
Begin
Case(&n)
When 1 Then Open vRefCur For Select * from emp;
When 2 Then Open vRefCur For Select * from dept;
Else
Open vRefCur For Select eno, ename from emp Where JOB = 'CLERK';
End Case;
Close vRefCur;
End;
-----------------------------------
TIPS:
%TYPE:属性的一种方式是在变量声明中使用。%TYPE是用于取得表或游标中的字段类型,
例如,可以使用它来声明ARTIST表中字段类型相同的变量,注意可以在表中名和字段之间使用点号(.)。
DEALARE
V_UNIT_NAME
V_BGOID
通过这种方式就不需要明确指定SQL数据类型,从而改善了代码的可维护性,因为表中字段类型的改变会自动反映在PL/SQL中;
%ROWTYPE
使用%ROWTYPE属性可以声明一个基于表或游标的行对象,也称为记录对象,例如,可以基于ARTIST声明一个行对象:
declare
一旦生成这条记录,那么就可以通过游标使用句号来提取newXmUnitBg的字段值,例如newXmUnitBg.UNIT_NAME 单位名称, newXmUnitBg.BGOID 变更申请号
cursor frdm_cursor
AND FRDM_TZH in(select frdm from kwmis_unit_baseinfo);
begin
if
exit when frdm_cursor%notfound
%TYPE是跟表中的字段的类型一致,是变量类型.而%ROWTYPE是跟表中的行类型一致,是record类型.
--------------------以上是转载
- REF CURSOR
- REF Cursor
- REF CURSOR
- REF Cursor
- ref cursor
- REF Cursor
- Ref Cursor
- Oracle REF CURSOR 使用方法
- REF CURSOR 小结
- REF CURSOR 小结
- 动态游标(REF CURSOR)
- Oracle ref cursor使用
- REF CURSOR讲解
- oracle ref -cursor
- oracle ref -cursor
- 动态游标(REF CURSOR)
- Oracle REF Cursor
- REF CURSOR总结
- 我的PHP工程师的关键词
- 我使用过的Linux命令之hwclock - 查询和设置硬件时钟
- 爬虫伪装方法分类
- keybd_event使用方法
- 在iOS开发中使用FMDB
- Ref Cursor
- 临时表 MySQL的临时表
- python去除html标签
- imregionalmin() imregionalmax()
- Linux下建立和管理逻辑卷
- Word Ladder
- 180天做180个“网站”来学编程,今天是第115天
- 使用Jquery解析Json基础知识
- C# 3.0 介绍 (一)