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. Chapter 2 User Authentication, Authorization, and Security(1):选择Windows和SQL 身份验证

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38657111,专题目录:http://blog.csdn.net/dba_huangzj ...

  2. 【翻译】如何创建Ext JS暗黑主题之二

    原文:How to Create a Dark Ext JS Theme– Part 2 我已经展示了如何去开发一个精致的暗黑主题,看起来就像Spotify.在本文的第一部分,了解了Fashion.S ...

  3. Gradle脚本打包so库

    要让引用的第三方的so库被打包进去,只需要把相关的armeabi文件夹放在libs下面,然后在builld.gradle脚本中加上这一句: sourceSets{ main { jniLibs.src ...

  4. SQL2008数据表空间大小查询脚本

    --尽量少用触发器,否则数据库增长很快,特别是关于登陆的数据表字段不要用出发器,一周左右能使得数据库增长1G的空间. --数据库表空间大小查询脚本 IF  EXISTS (SELECT * FROM ...

  5. 2014新年福利,居然有人将Ext JS 4.1的文档翻译了

    原文:http://damoqiongqiu.iteye.com/blog/1998022

  6. HTTPSQS 队列

    http://blog.csdn.net/21aspnet/article/details/7467812 http://hi.baidu.com/caoxin_rain/item/5282770cd ...

  7. TCP的核心系列 — SACK和DSACK的实现(二)

    和18版本相比,37版本的SACK和DSACK的实现做了很多改进,最明显的就是需要遍历的次数少了, 减少了CPU的消耗.37版的性能提升了,代码有大幅度的改动,逻辑也更加复杂了. 本文主要内容:37版 ...

  8. LeetCode之“动态规划”:Triangle

    题目链接 题目要求: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to ...

  9. Android 高逼格纯代码实现类似微信钱包带分割线的GridView

    前言    原文地址:http://blog.csdn.net/sk719887916/article/details/40348837: Tamic 通过上两篇关于自定view的文章,在自定义vie ...

  10. Linux - 停机常用的anacron

    什么是 anacron anacron 并不是用来取代 crontab 的,anacron 存在的目的就在於我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的运行! ...