静态游标:结果集已经确实(静态定义)的游标。分为隐式和显式游标

隐式游标:所有DML语句为隐式游标,通过隐式游标属性可以获取SQL语句信息;

显式游标:用户显式声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标;

REF游标:动态关联结果集的临时对象

静态游标Cursor:隐式游标/显示游标

游标是内存中的一个区域,在DML语句运行时打开,完成后关闭

判断隐式游标的属性

隐式游标

执行DML操作,返回游标情况

declare

begin

update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';

if sql%found then

dbms_output.put_Line(sql%rowcount||' rows has been updated');

elsif sql%notfound then

dbms_output.put_line('0 updated');

end if;

end;

/

4 rows has been updated

PL/SQL procedure successfully completed.

declare

begin

update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';

if sql%found then

dbms_output.put_line(sql%rowcount||' rows has been updated');

elsif sql%notfound then

dbms_output.put_line(sql%rowcount||' rows has been updated');

end if;

end;

/

定义显式游标

declare

cursor cur_emp is select * from emp;

v_empRow emp%ROWTYPE;

begin

if cur_emp%isopen then --游标已经打开

null;

Else --游标未打开

open cur_emp;--打开游标

end if;

fetch cur_emp into v_empRow;--取出游标当前行数据

while cur_emp%FOUND loop--判断是否有数据

dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

fetch cur_emp into v_empRow;--把游标指向下一行

end loop;

close cur_emp;--关闭游标

end;

/

1/EMPNO SMITH,position: CLERK,salary: 800

2/EMPNO ALLEN,position: SALESMAN,salary: 1600

3/EMPNO WARD,position: SALESMAN,salary: 1250

4/EMPNO JONES,position: MANAGER,salary: 2975

5/EMPNO MARTIN,position: SALESMAN,salary: 1250

6/EMPNO BLAKE,position: MANAGER,salary: 2850

7/EMPNO CLARK,position: MANAGER,salary: 2450

8/EMPNO SCOTT,position: ANALYST,salary: 3000

9/EMPNO KING,position: PRESIDENT,salary: 5000

10/EMPNO TURNER,position: SALESMAN,salary: 1500

11/EMPNO ADAMS,position: CLERK,salary: 1100

12/EMPNO JAMES,position: CLERK,salary: 950

13/EMPNO FORD,position: ANALYST,salary: 3000

14/EMPNO MILLER,position: CLERK,salary: 1300

定义显示游标流程

定义游标(cur_emp)

If cur_emp%isopen then null

Else open cur_emp

取得一行记录(fetch cur_emp into v_empRow)

如果Cur_emp%found 则执行LOOP循环:

输出当前行记录

取得下一行记录(fetch cur_emp into v_empRow)

回到LOOP循环

关闭游标

使用LOOP循环输出游标

eclare

cursor cur_emp is select * from emp;

v_empRow emp%ROWTYPE;

begin

if cur_emp%isopen then --游标打开

null;

Else --游标未打开

open cur_emp;--打开游标

end if;

loop

fetch cur_emp into v_empRow;取出游标当前行数据

exit when cur_emp%notfound;--如果没有找到数据则退出循环

dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

end loop;

close cur_emp;--关闭游标

end;

/

定义显示游标流程

定义游标(cur_emp)

If cur_emp%isopen then null

Else open cur_emp

LOOP循环:

取出游标当前行数据(fetch cur_emp into v_empRow)

exit when cur_emp%notfound;--如果没有找到数据则退出循环

输出

回到LOOP循环

关闭游标

使用FOR循环操作游标

declare

cursor cur_emp is select * from emp;

begin

for v_empRow in cur_emp loop

dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

end loop;

end;

/

尽量使用FOR循环操作

在编写游标操作中,使用FOR循环操作游标不仅代码简单,而且可以将游标的状态交给系统去完成

定义游标(cur_emp)

FOR循环判断数据是否在游标内(FOR v_empRow in cur_emp loop)

输出

循环结束

定义参数游标

declare

cursor cur_emp(dno emp.deptno%type) is select * from emp where deptno=dno;

begin

for v_empRow in cur_emp(&deptno) loop

dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salar0y: '||v_empRow.sal);

end loop;

end;

/

PLSQL游标的更多相关文章

  1. PLSQL游标使用

    游标是一个指针,它指向一块SQL区域,该区域用于存储处理过来的SELECT或者其他的DML操作返回的数据.由PLSQL创建并管理的游标成为隐式游标,用户创建并管理的成为显示游标.游标可以看做是指向记录 ...

  2. SQL记录-PLSQL游标

    PL/SQL游标 Oracle会创建一个存储区域,被称为上下文区域,用于处理SQL语句,其中包含需要处理的语句,例如所有的信息,行数处理,等等. 游标是指向这一上下文的区域. PL/SQL通过控制光标 ...

  3. Oracle PLSQL游标、游标变量的使用

    参考文章:https://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实 ...

  4. PLSQL开发笔记和小结(转载)

    *****************************************   PLSQL基本结构 ***************************************** 基本数据 ...

  5. Oracle之PLSQL总结

    基本数据类型变量 1. 基本数据类型     Number 数字型     Int 整数型     Pls_integer 整数型,产生溢出时出现错误 Binary_integer 整数型,表示带符号 ...

  6. PLSQL开发笔记和小结

    *****************************************  PLSQL基本结构*****************************************基本数据类型变 ...

  7. PLSQL学习教程(全)

    基于ORACLE9i+PL/SQLDeveloper7.1.4) 课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ...

  8. plsql oracle 使用教程

    课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名ALIASES 5.连接列 6.在SQL PLUS中编辑缓冲,修改 ...

  9. Oracle存储过程、游标、函数

    SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数 ...

随机推荐

  1. dom4j string转为xml

    /**XML转字符串 */ Document document = new SAXReader().read(new File("E:test.xml"));;  String t ...

  2. 《Essential C++》读书笔记 之 C++编程基础

    <Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...

  3. python 中的i++ ,逻辑表达式

    1.关于i++ python 中的没有 i++ ,如果写了会报语法错误. 但是python 中有 --i,++i,+-i,-+i,他们不是实现-1操作的,仅仅是作为判断运算符号,类似数学中的负负得正 ...

  4. 【iCore1S 双核心板_FPGA】例程七:基础逻辑门实验——逻辑门使用

    实验现象: 打开tool-->Netlist viewer-->RTL viewer可观察各个逻辑连接 核心代码: //-----------------Module_logic_gate ...

  5. php框架之odp(一)

    熟悉odp框架的使用已经快一个月了,今天总结一下.odp和yii都是成熟的常用的php框架,因为odp是公司内部开发的,且公司内部用odp的较多,所以我就从odp框架入手.仅仅纪录自己的学习体会 一. ...

  6. git初始化本地项目并推送到git服务器

    1.创建本地项目,在项目根目录执行git init命令 git init 2.在git服务器上创建一个仓库,这里使用GitHub创建一个仓库. 3.执行git remote add origin &l ...

  7. Path expected for join!错误处理

    在Hibernate中,进行连接查询时,如果使用join语句,就容易产生标题所示的错误. 比如from Content o left join Mcp mcp where o.mcp.id=mcp.i ...

  8. [Bayes] Multinomials and Dirichlet distribution

    From: https://www.cs.cmu.edu/~scohen/psnlp-lecture6.pdf 不错的PPT,图示很好. 伯努利分布 和 多项式分布 Binomial Distribu ...

  9. [Laravel] 11 - WEB API : cache & timer

    前言 一.资源 Ref: https://www.imooc.com/video/2870 二.缓存 缓存:静态缓存.Memcache.redis缓存 Ref: [Laravel] 09 - Func ...

  10. EGit系列第三篇——远程提交代码

    接着上篇,把本地项目提交一次才能Pull,为什么要Pull而不直接Remote Push呢,因为本地和远程仓库内容不一样(通常在远程仓库第一次新建项目会带一个README.md), 要先把远程仓库的东 ...