1.游标的概念以及作用

      游标(Cursor)可以使用户想操作数组一样对查询出来的结果集进行操作,可以形象的看做一个变动的光标,其实际行是一个指针,它在一段Oracle存放数据查询结果集或数据

    操作集的内存中,这个指针可以指向结果集的任何位置。

    分类: 分为静态游标和ref游标(暂不做介绍)。静态游标 又分为 显示游标和隐式游标 ,隐式游标它是被oracle自动管理的 ,不需要详细的去了解只需要 知道怎么用就可以了。

      显示游标:就是我们普遍使用的。就是在使用之前有着明确的定义,一般都会关联数据查询语句,返回一行或多行记录。

      使用步骤:1.声明游标  2.打开游标 3.提取数据 4.关闭游标

    语法结构:简单语法结构如下代码示例    

 DECLARE CURSOR cursor_name
--1.声明名为cursor_name 的游标
IS
--与之关联的sql语句
SELECT ID ,NAME ,score FROM TABLE ;
--声明了一个与数据表字段name类型一样的变量myname
myname tablename.name%TYPE;
--声明了一个可以去表中一行记录的变量
myrow tablename%ROWTYPE;
BEGIN
--2.打开游标
OPEN cursor_name;
--3.提取数据
FETCH CURSOR INTO myrow;
dbms_output.put_line(myrow.name||'---'||myrow.id); --4.关闭游标
CLOSE cursor_name;
END;

      通常显示游标提取的数据不会只有一条,所有想遍历其结果集就需使用loop

    下边创建一张简单的数据表,使用loop游标操作数据

 CREATE TABLE cur_test_student(
--创建简单的测试表 id号, 名字 ,分数 ,科目,年龄
sid NUMBER(8) PRIMARY KEY,
sname VARCHAR2(10) NOT null,
score NUMBER(8) NOT null,
subject Varchar2(20),
sage NUMBER(8)
);

   loop游标示例:

  

 DECLARE CURSOR cur_score
--声明游标查询某一科目所有学生的name和score
IS
SELECT sname,score FROM cur_test_student WHERE subject='语文';
namee cur_test_student.sname%TYPE;
sco cur_test_student.score%TYPE; BEGIN
OPEN cur_score;
LOOP
--提取数据保存到两个变量中
FETCH cur_score INTO namee,sco;
--隐式游标判断当没有数据是退出循环
EXIT WHEN cur_score%NOTFOUND;
dbms_output.put_line(namee||'----------'||sco); END LOOP;
CLOSE cur_score;
END;

  

for循环游标:

  游标for循环是在pl/sql块中使用游标最简单的方式,它简化了对游标的处理。当使用游标for循环时,oracle会隐含的打开游标,提取游标数据并关闭游标。

 DECLARE CURSOR cur_score
--声明游标查询某一科目所有学生的name和score
IS
SELECT sname,score FROM cur_test_student WHERE subject='语文';
BEGIN
FOR student_recode IN cur_score LOOP dbms_output.put_line(student_recode.sname||'---'||student_recode.score); END LOOP;
END;

注意两种写发的不同之处:在for循环的游标中没有 打开游标 关闭游标等四部操作,很多工作oracle隐式的帮我们执行了 也不需要判断合适退出等工作。

  这种写法比简单明了。

带参数的游标

  使用游标是可以指定参数,可以传入多个参数 方便多条件查询,在存储过程中也可以方便的使用

  

 DECLARE CURSOR cur_score(sub VARCHAR2) IS

     SELECT sname ,score FROM cur_test_student WHERE subject=sub;

     BEGIN
FOR score_recode IN cur_score('语文')LOOP dbms_output.put_line(score_recode.sname||'---'||score_recode.score); END LOOP;
END;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  

    

    

oracle 游标简单示例的更多相关文章

  1. oracle 游标简单案例

    oracle  游标简单案例 一.案例: DECLARE IDO NUMBER; DABH CHAR); t_count ); CURSOR TJ_CURSOR IS SELECT IDO,DABH ...

  2. 在PYTHON中,用cx_Oracle连接ORACLE数据库简单示例

    一,在安装的时候,参数有点不一样: python setup.py build install 二,连接数据库,有两种方式,DSN和TNSNAMES方式: #dsn = orcl.makedsn(se ...

  3. Oracle 游标示例,带异常处理

    Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...

  4. Oracle游标的使用示例

    此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...

  5. Oracle游标介绍

    Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...

  6. oracle游标遍历

    --创建存储过程 CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p (--参数IN表示输入参数,OUT表示输入参数,类型可以使用任意Oracle中的合法类型. is_ ...

  7. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  8. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  9. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

随机推荐

  1. MongoDB分组

    MongoDB三种分组方式 group(先筛选再分组,不支持分片,对数据量有所限制,效率不高) [简单分组实测150W 12.5s] mapreduce(基于js引擎,单线程执行,效率较低,适合用做后 ...

  2. Linux之使用网络

    Linux有好多命令可以让你方便的使用网络,常见的有ssh,rsync,wget,curl等等,但是telnet等方式并不适用于网络交互的使用,因为它会暴露你的用户名密码等.所以一般使用安全的命令来进 ...

  3. 基于MSRDS机器人仿真平台的多机器人PID编队控制算法

    自己调试的编队PID算法,效果也还可以,具体使用教程参考视频链接: http://v.youku.com/v_show/id_XMTUwNjc3NjMyNA 仿真中三个机器人保持编队,做直线运动,队形 ...

  4. TableEdit&nbsp;UI_10

    1.tableView的编辑的步骤:  1.让tableView处于编辑状态,(默认所有的cell都处于编辑状态,默认下的编辑样式是删除) 2.设置哪些cell可以编辑  3.设置编辑的样式(删除,插 ...

  5. STL:vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  6. C++编译器何时为用户提供默认构造函数

    第一种是类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么C++编译器会帮你给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造.需要强调的是,如果这个成员的 ...

  7. C语言assert的用法

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int ...

  8. EBS 外部信用风险检查

    DECLARE l_msg_count NUMBER; l_msg_data VARCHAR2(2000); l_return_status VARCHAR2(30); l_cc_hold_comme ...

  9. Java进阶(二十三)java中long类型转换为int类型

    java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...

  10. 线性表的顺序存储设计和实现 - API函数实现

    基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 线性表长度加1 获取元素操作 判断线性表是否合法 判断位置是否合 ...