四、游标的使用
在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的基础知识,包括其与SQL的关系、程序设计的基本结构和组成元素。 ### SQL与PL/SQL SQL(Structured Query Language)是用于管理关系数据库的标准语言,主要负责数据查询、更新和...
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
这本“PL/SQL超级笔记”显然是针对初学者设计的,旨在帮助他们掌握这一强大的数据库编程工具。 PL/SQL的组成部分包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标等;执行部分包含SQL语句...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...
### PL/SQL 学习笔记知识点详解 #### 1. PL/SQL 基本结构 - **DECLARE**: 在此部分声明变量、常量、数据类型及游标。 - **BEGIN**: 主程序体开始,可以包含任何合法的PL/SQL语句。 - **EXCEPTION**: 异常处理部分,...
以上就是PL/SQL的基础知识,包括块的定义、时间类型、复合类型、变量声明、流程控制等,这些构成了编写PL/SQL程序的基础框架。理解并熟练掌握这些概念对于进行Oracle数据库的开发和管理至关重要。
PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL(结构化查询语言)与过程式编程语言相结合,为数据库管理提供了强大的编程能力。以下是对PL/SQL的一些核心知识点...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...
Oracle PL/SQL编程是Oracle数据库开发中的核心技能之一,它是一种强大的过程式语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库程序。第五版的《Oracle PL SQL Programming》是一本深入学习PL/SQL的权威...
本篇笔记主要围绕Java3相关课程中的PL/SQL部分进行深入讲解,由薛海璐老师主讲,全面涵盖了PL/SQL的基础概念、程序结构、运行过程以及变量和数据类型等核心知识点。 1、PL/SQL简介 PL/SQL是Oracle数据库的一种过程...
PL/SQL 学习笔记总结 PL/SQL 是 Oracle 在标准 SQL 语言上的扩展,提供了更多的编程功能,例如定义变量和常量、使用条件语句和循环语句、例外处理等。使用 PL/SQL 可以提高开发效率和数据库性能。 PL/SQL 的优点 ...
这些笔记涵盖了SQL和PL/SQL的基础知识,适合初学者了解和掌握数据库操作的基本概念和语法。随着经验的积累,开发者可以深入学习高级特性和最佳实践,如性能优化、并发控制、数据库设计等,以提升在Oracle数据库环境...