Oracle Cursor
1、概念
游标:从字面来理解就是游动的光标。用数据库语言来描述,游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。
2、分类
2.1、静态游标:显式游标、隐式游标
2.2、动态游标:强类型(限制)、弱类型(非限制)
3、属性
3.1、%ISOPEN 判断游标是否被打开,若打开,则%ISOPEN等于TRUE;否则等于FALSE。
3.2、%FOUND 判断游标所在行是否有效。若有效,则%FOUND等于TRUE;否则等于FALSE。
3.3、%NOTFOUND 与%FOUND相似,功能相反。
3.4、%ROWCOUNT 返回到当前位置为止,游标所读取的记录行数。
4、详细说明
4.1、显式游标:
Cursor 游标名(参数) [返回值类型] Is Select语句
OPEN 游标名(参数)
FETCH 游标名(参数) INTO 变量
CLOSE 游标名(参数)
4.2、隐式游标:
select **** into **** from **** where ****
for var_name in (select ****)
loop
end loop
for var_name in (游标名(参数))
loop
end loop
4.3、动态游标
动态游标,在运行的时候才能确定游标使用的查询。分类:
1.强类型(限制)REF CURSOR,规定返回类型
2.弱类型(非限制)REF CURSOR,不规定返回类型,可以获取任何结果集。
5、举例:
5.1、静态显式游标
set serveroutput on;
declare
r_d2tlog d2t_Log%rowtype;
cursor cs_d2tlog is select * from d2t_log;
begin
open cs_d2tlog;
loop
fetch cs_d2tlog into r_d2tlog;
exit when cs_d2tlog%notfound;
dbms_output.put_line('activeid='||r_d2tlog.activeid||';is already read counts='||cs_d2tlog%rowcount);
end loop;
close cs_d2tlog;
end;
/
5.2、动态弱类型游标
declare
r_d2tlog d2t_Log%rowtype;
type d2tlog is ref cursor;
t_d2tlog d2tlog;
begin
open t_d2tlog for select * from d2t_log;
loop
fetch t_d2tlog into r_d2tlog;
exit when t_d2tlog%notfound;
dbms_output.put_line('activeid='||r_d2tlog.activeid||';is already read counts='||t_d2tlog%rowcount);
end loop;
close t_d2tlog;
end;
/
5.3、动态强类型游标
declare
l_sqlstr varchar2();
type t_d2tlog is record(
activeid number(),
writedate date
);
type c_d2tlog is ref cursor return t_d2tlog;
st_d2tlog t_d2tlog;
sc_d2tlog c_d2tlog;
begin
open sc_d2tlog for select activeid,writedate from d2t_log;
loop
fetch sc_d2tlog into st_d2tlog;
exit when sc_d2tlog%notfound;
dbms_output.put_line('activeid='||st_d2tlog.activeid||';is already read counts='||sc_d2tlog%rowcount);
end loop;
close sc_d2tlog; open sc_d2tlog for select activeid,writedate from d2t_log where activeid=;
loop
fetch sc_d2tlog into st_d2tlog;
exit when sc_d2tlog%notfound;
dbms_output.put_line('activeid='||st_d2tlog.activeid||';is already read counts='||sc_d2tlog%rowcount);
end loop;
close sc_d2tlog; /*
l_sqlstr:='select activeid,writedate from d2t_log where activeid=124531';
open sc_d2tlog for l_sqlstr;
loop
fetch sc_d2tlog into st_d2tlog;
exit when sc_d2tlog%notfound;
dbms_output.put_line('activeid='||st_d2tlog.activeid||';is already read counts='||sc_d2tlog%rowcount);
end loop;
close sc_d2tlog;
*/
end;
/
5.4、动态强类型游标
declare
r_d2tlog d2t_log%rowtype;
type cursor1 is ref cursor;
type cursor2 is ref cursor return d2t_log%rowtype; cs_cursor2 cursor2;
begin
dbms_output.put_line('dynamic cursor define ok'); open cs_cursor2 for select * from d2t_log;
loop
fetch cs_cursor2 into r_d2tlog;
exit when cs_cursor2%notfound;
dbms_output.put_line('activeid='||r_d2tlog.activeid||';is already read counts='||cs_cursor2%rowcount);
end loop;
close cs_cursor2;
end;
/
5.5、游标定义
declare
r_d2tlog d2t_log%rowtype;
type cursor1 is ref cursor;
type cursor2 is ref cursor return r_d2tlog;
begin
dbms_output.put_line('dynamic cursor define error');
end;
/
程序员的基础教程:菜鸟程序员
Oracle Cursor的更多相关文章
- Oracle cursor学习笔记
目录 一.oracle库缓存 1.1.库缓存简介 1.2.相关概念 1.3.库缓存结构 1.4.sql执行过程简介 二.oracle cursor 2.1.cursor分类 2.2.shared cu ...
- Oracle Cursor的使用
When Oracle Database executes a SQL statement, it stores the result set and processing information i ...
- 转 oracle cursor 游标
转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...
- sql:oracle, CURSOR
CursorsYou use a cursor to fetch rows returned by a query. You retrieve the rows into the cursor usi ...
- Oracle Cursor用法总结
cursor分为三种,一是直接声明为cursor变量,二是首先声明类型再声明变量,三是声明为sys_refcursor. (1)直接声明 declare cursor emp_cur is sele ...
- python3.6连接oracle数据库
下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Oracle/5.2.1#downloads 这里下载的是源码进行安装 [root@oracle or ...
- ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值
1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...
- Populating Tabular Data Block Manually Using Cursor in Oracle Forms
Suppose you want to populate a non-database data block with records manually in Oracle forms. This t ...
- Oracle 游标Cursor 的基本用法
查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...
随机推荐
- Delphi 用文件流读取文本文件字符串的方法
procedure TForm23.Button4Click(Sender: TObject); var pstr:Pchar; mestr,Str1:string; FS:TFilestream; ...
- Hibernate中的数据库方言(Dialect)
在配置hibernate.cfg.xml时需指定使用数据库的方言: 例: <property name="dialect">org.hibernate.dialect. ...
- NHibernate系列文章二十八:NHibernate Mapping之Auto Mapping(附程序下载)
摘要 上一篇文章介绍了Fluent NHibernate基础知识.但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping.只需在代码中定义一些Conv ...
- JS 取得一个区间的随机整数
function rnd(n, m){ var random = Math.floor(Math.random()*(m-n+1)+n); return random; ...
- maven出现 -Dmaven.multiModuleProjectDirectory system propery错误
1.使用myeclipse10整合maven插件时出现错误: -Dmaven.multiModuleProjectDirectory system propery is not set. Check ...
- private + virtual in Java/C++
在Java中,private方法是隐式final的,就是说即使在子类中定义一个一模一样的方法,编译器认为这是两个没有联系的方法.private方法不参与运行时多态,这点和 final方法.static ...
- 修改tomcat应用日志默认编码格式
前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想到会不会跟tomcat的设置有关呢,于是在网 ...
- TJI读书笔记16-异常处理
TJI读书笔记16-异常处理 概念 基本异常情形 异常的捕获 自定义异常 异常说明 捕获所有异常 栈轨迹 重新抛出异常 Java标准异常 使用finally 异常的限制 构造器 异常的匹配 其他乱七八 ...
- Haproxy ssl 配置方式
通过haproxy redirect请求重定向的方法实现HTTP跳转HTTPS 配置实现http跳转到https,采用redirect重定向的做法,只需在frontend端添加: frontend h ...
- jquery实现章节目录效果
<html><head><title>jquery实现章节目录效果</title> <script type="text/javascr ...