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的更多相关文章

  1. Oracle cursor学习笔记

    目录 一.oracle库缓存 1.1.库缓存简介 1.2.相关概念 1.3.库缓存结构 1.4.sql执行过程简介 二.oracle cursor 2.1.cursor分类 2.2.shared cu ...

  2. Oracle Cursor的使用

    When Oracle Database executes a SQL statement, it stores the result set and processing information i ...

  3. 转 oracle cursor 游标

    转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...

  4. sql:oracle, CURSOR

    CursorsYou use a cursor to fetch rows returned by a query. You retrieve the rows into the cursor usi ...

  5. Oracle Cursor用法总结

    cursor分为三种,一是直接声明为cursor变量,二是首先声明类型再声明变量,三是声明为sys_refcursor. (1)直接声明 declare cursor emp_cur  is sele ...

  6. python3.6连接oracle数据库

    下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Oracle/5.2.1#downloads 这里下载的是源码进行安装 [root@oracle or ...

  7. ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值

    1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...

  8. 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 ...

  9. Oracle 游标Cursor 的基本用法

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...

随机推荐

  1. typedef 揭秘

    typedef用来声明一个别名,typedef关键字后面是一个声明.语法上typedef属于存储类声明说明符 一.引言 如果你理解typedef的简单形式: typedef int PARA; 这种形 ...

  2. C# 调用Adodb对Access数据库执行批量插入

    public void BatchInsertIntoAccess(DataTable dt) { ADODB.Connection cn; ADODB.Recordset rs; string st ...

  3. 基于纹理的图片检索及demo(未启动)

    基于纹理的图片检索及demo(未启动)

  4. PS Web切图界面设置

    界面为移动工具时(快捷键V),选中左上角的图层. 点击视图,选中显示→智能参考线,与标尺. 点击窗口,把"库" "颜色"去掉,把屏幕右上角的"通道&q ...

  5. iBatis的SQL注入

    sqlMap中尽量不要使用$;$使用的是Statement(拼接字符串),会出现注入问题.#使用的是PreparedStatement(类似于预编译),将转义交给了数据库,不会出现注入问题:.前者容易 ...

  6. $(document).ready()方法和window.onload区别

    事件: javascript 和 HTML之间的交互式通过用户和浏览器操作页面时引发的事件来处理的.当文档或者它的某些元素发生某些变化和操作时,浏览器会自动生成一个事件:例如:当用户单击某个按钮时,也 ...

  7. AJAX实现跨域的三种种方法(代理,JSONP,XHR2)

    由于在工作中需要使用AJAX请求其他域名下的请求,但是会出现拒绝访问的情况,这是因为基于安全的考虑,AJAX只能访问本地的资源,而不能跨域访问. 比如说你的网站域名是aaa.com,想要通过AJAX请 ...

  8. php中的魔术方法

    __construct 构造器是一个魔术方法,当对象被实例化时它会被调用.在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承.如果我们 ...

  9. Php安全规范

    一.基本准则 所有的用户输入都是有害的,对所有从客户端传入的数据都不信任, 需要做判断和过滤(类型,长度,格式,范围),否则可能会受到SQL Injection.XSS等攻击.比如:$_GET, $_ ...

  10. 第一二九天上课 PHP 自制简单开发模板

    构建基础架构 在项目文件夹(自定义)下创建 (1)核心目录:WQ (2)模板目录:MoBan (3)编译目录:BianYi (4)创建配置文件: config.ini.php <?php //获 ...