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

隐式游标:所有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. 使用python抓取58手机维修信息

    之前在ququ的博客上看到说 python 中的BeautifulSoup 挺好玩的,今天下午果断下载下来,看了下api,挺好用的,完了2把,不错. 晚上写了一个使用python抓取58手机维修信息的 ...

  2. 【iCore1S 双核心板_FPGA】例程六:状态机实验——状态机使用

    核心代码: module FSM( input CLK_12M, input FPGA_KEY, output FPGA_LEDR, output FPGA_LEDG, output FPGA_LED ...

  3. AI金融知识自学偏量化方向-前提1

    前提: 统计学习(统计分析)和机器学习之间的区别 金融公司采用机器学习技术及招募相关人才要求 第一个问题:  机器学习和统计学都是数据科学的一部分.机器学习中的学习一词表示算法依赖于一些数据(被用作训 ...

  4. 一些jquery特效收集

    jQuery幻灯片插件带投影的图片叠加切换幻灯片轮播 特效:http://www.jsfoot.com/jquery/images/ jquery文字滚动上下间歇文字滚动 http://www.17s ...

  5. vector、map 内存释放

    一.vector void TestVector() { cout << "begin create vector" << endl; int iSize ...

  6. 手动升级11.2.0.1的rac数据库到11.2.0.4

    ① 关闭两个节点上的数据库 crsctl stop resource ora.ORA11G.db ② 命令行单节点启动数据库, 注意这里的SQLPLUS 一定是升级后的软件地址 sqlplus / a ...

  7. Springframework和Hibernate版本对应关系

    org.springframework 3.0.x对应org.hibernate4.0.x版本 org.springframework 3.2.x对应org.hibernate4.2.x版本 org. ...

  8. JAVA基础知识点总结(全集)

    1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...

  9. 阿里云中ssl配置(nginx安装https服务)

    1.配置 a.阿里云服务器 b.安装了nginx,php等 2.申请免费ssl证数 a. b. c.产看ssl证数 d.下载证数 e,这里我下载的是nginx(crt与key文件) f.服务器上配置 ...

  10. mongodb查询数据库中某个字段中的值包含某个字符串的方法

    正则表达式最能解决: 例如: db.getCollection(.*$/}) 这里主要是注意正则表达式要写对,该转义的注意转义,否则报错.