`

PL/SQL程序设计-学习笔记3--游标

 
阅读更多
四、游标的使用
在PL/SQL程序中,对于处理多行记录的事务经常使用游标来实现。
游标是一个指向上下文的句柄(handle)或指针。通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情。
游标属性:%FOUND(布尔型属性,当最后一次读记录时成功返回,则值为true) %NOTFOUND(布尔型属性,与%FOUND相反) %ISOPEN(布尔型属性,当游标已打开时返回true) %ROWCOUNT(数字型属性,返回已从游标中读取的记录数)
declare
--定义游标
cursor c_cursor(emp_no number default 11) is
select last_name,salary from employees where rownum < emp_no order by salary;
v_name employees.last_name%type;
v_sal employees.salary%type;
begin
--打开游标
open c_cursor(emp_no => 20);
--提取游标数据
fetch c_cursor into v_name,v_sal;
while c_cursor %found loop
dbms_output.put_line(v_name || ':' || v_sal);
fetch c_cursor into v_name,v_sal;
end loop;
--关闭游标
close c_cursor;
end;
游标的FOR循环:PL/SQL语言提高了游标FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能。
declare
cursor c_emp(dep_id number default 50) is
select last_name,salary sal from employees where department_id = dep_id;
begin
for v_emp in c_emp(80) loop
dbms_output.put_line(v_emp.last_name || ',' || v_emp.sal);
end loop;
end;
PL/SQL还允许在游标FOR循环语句中使用子查询来实现游标的功能:
begin
for v_emp in (select last_name,salary from employees) loop
dbms_output.put_line(v_emp.last_name ||','|| v_emp.salary);
end loop;
end;
显示游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;而对于非查询语句,如修改、删除操作,则由ORACLE系统自动的为这些操作设置游标并创建其工作区,这些有系统隐含创建的游标称为隐式游标,隐式游标的名字为SQL.
隐式游标属性:SQL%FOUND / SQL%NOTFOUND / SQL%ROWCOUNT / SQL%ISOPEN
declare
v_name employees.last_name%type;
v_id employees.employee_id%type := &v_id;
begin
update employees set last_name = 'xx' where employee_id = v_id;
if SQL%NOTFOUND then
dbms_output.put_line('查无此人');
end if;
end;
SELECT ...INTO语句触发NO_DATA_FOUND;
当一个显示游标的WHERE子句未找到时触发%NOTFOUND;
当UPDATE或DELETE语句的WHERE子句未找到时触发SQL%NOTFOUND;
在提取循环中要用%NOTFOUND或%FOUND来确定循环的退出条件,不要用NO_DATA_FOUND.
游标修改和删除操作:是指在游标定位下,修改或删除表中指定的数据行。但要求游标查询语句中必须使用FOR UPDATE选项,以便在打开游标时锁定游标结果集合在表中对应数据行的所有列和部分列。
为了对正在处理(查询)的行不被另外的用户改动,ORACLE提供了一个FOR UPDATE子句来对所选择的行进行锁住。该需求迫使ORACLE锁定游标结果集合的行,可以防止其他事务处理更新或删除相同的行,直到您的事务处理提交或回退为止。
declare
v_dep_id employees.department_id%type := &v_dep_id;
cursor emp_cursor is
select last_name,salary from employees where department_id = v_dep_id for update nowait;
begin
for emp_rec in emp_cursor loop
if emp_rec.salary < 3000 then
update employees set salary = 3000 where current of emp_cursor;
end if;
end loop;
分享到:
评论

相关推荐

    PL/SQL学习笔记

    PL/SQl学习完整笔记。详细描述了,游标,集合,触发器,常用函数,调试,异常等内容

    Oracle 入门文档

    Oracle笔记 九、PL/SQL 游标的使用 Oracle笔记 十、PL/SQL存储过程 Oracle笔记 十一、PL/SQL函数和触发器 Oracle笔记 十二、PL/SQL 面向对象oop编程 Oracle笔记 十三、PL/SQL面向对象之package Oracle笔记 十四...

    ORACLE 游标学习笔记

    在PL/SQL中为所有SQL数据操纵语句(包括返回一行的select)隐式声明游标,称为隐式游标的原因是用户不能直接命名和控制此类游标.当用户在PL/SQL中使用数据操纵语言(DML)时,Oracle预先定义一个名为SQL的隐式游标

    Oracle PL/SQL高级编程

    主要是Oracle过程,函数,触发器,游标,包学习中自己所做的一些笔记,希望能够让初学者做一些参考!

    oracle学习笔记整理

    学习oracle知识笔记整理,包括pl/sql编程,过程、函数、游标开发等。

    Java/JavaEE 学习笔记

    PL/SQL学习笔记............358 第一章 PL/SQL概述........................358 第二章 PL/SQL程序结构................359 第三章 PL/SQL数据类型................362 第四章 PL/SQL中的控制语句........368 第五章...

    ORACLE_PlSql-甲骨文学习笔记

    四、ORACLE PL/SQL简介 5 1 块结构 5 2 变量和类型 6 3 条件逻辑 6 4 循环 7 5 游标 8 №1声明一些变量,用于保存select语句的返回的列值 8 №2声明游标,并指定select语句 8 №3打开游标 8 №4从游标中获取记录 9 ...

    J2EE学习笔记(J2ee初学者必备手册)

    PL/SQL学习笔记............358 第一章 PL/SQL概述........................358 第二章 PL/SQL程序结构................359 第三章 PL/SQL数据类型................362 第四章 PL/SQL中的控制语句........368 第五章...

    oracle学习笔记

    oracle安装,oracle常用命令,实例,pl/sql,事物处理,游标存储过程

    ORACLE学习笔记2:日常应用、深入管理、性能优化.

    第11章 PL/SQL语言基础 第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL...

    oracle PL_SQL 教程

    oracle 教程 是我的学习笔记。 关于 存储过程(procedure) , 函数(function) 游标(curser) , 任务(job) 等都有详细的说明了实例演示, 每个实例都是经过测试的。

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。  SQL语言主要包含5个部分  数据定义...

Global site tag (gtag.js) - Google Analytics