游标(cursor)简单来说,就是指向结果集的指针。
在PL/SQL中,一条select语句只能返回一条记录,但是通过cursor就能完成取出多条记录的任务了。
先看一个简单的小例子:
declare
cursor c is
select * from emp;
v_emp c%rowtype;
begin
open c;
fetch c into v_emp;
dbms_output.put_line(v_emp.ename);
close c;
end;
其中有几点需要注意:
1.要在一个结果集上声明一个游标,如上,在“emp表”的查询结果集上声明了游标c;
2.“c%rowtype”相当于“v_emp”中可以存放一条结果集的记录;
3.用于游标需要“open”和“close”两个操作;
4.“fetch...into...”表示取出的结果存入。。。
那如何让我们取出多条记录呢?就可以通过“简单循环”与“游标”的结合来完成了。
继续优化上面的小例子:
declare
cursor c is
select * from emp;
v_emp c%rowtype;
egin
open c;
loop
fetch c into v_emp;
exit when(c%notfound);
dbms_output.put_line(v_emp.ename);
end loop;
close c;
end;
这里说一下游标的几个属性:
1.isopen: 即游标是否打开,很少用;
2.notfound:即最近的一个fetch语句没有返回记录;
3.found: 即fetch到记录了;
4.rowcount:即当前已经fetch到了多少条记录。
还有一个需要注意的:
其中的第10句和第11句不可以调换位置,因为当最后一次执行fetch语句的时候,没有返回记录,就去执行“dbms_output.put_line()”,则会再打印一遍上次fetch的结果。
再来2个小例子巩固一下:
declare
cursor c is
select * from emp;
v_emp emp%rowtype;
begin
open c;
fetch c into v_emp;
while(c%found) loop
dbms_output.put_line(v_emp.ename);
fecth c into v_emp;
end loop;
close c;
end;
其中,如果把第9句和第10句调换位置,则会出现第一句没打印,最后一句打印两边的现象。
declare
cursor c is
select * from emp;
begin
for v_emp in c loop
dbms_output.put_line(v_emp.ename);
end loop;
end;
这里的for循环,自动提供了一些操作,所以,
1.不需要声明v_emp;
2.不需要“open”和“close”游标;
3.不需要手动“fetch”。
综上,for循环语句简单,且不容易出错,所以经常被使用。
带参数的游标,这里的游标类似函数
例子:
declare
cursor c(v_deptno emp.deptno%type, v_job emp.job%type)
is
select ename, sal from emp where deptno = v_deptno and job = v_job;
begin
for v_temp in c(30, "clerk") loop
dbms_output.put_line(v_temp.ename);
end loop;
end;
可更新的游标
大多数游标是用来“只读”的,但也有一种游标是用来做“更新”的。
例子:
declare
cursor c
is
select * from emp for update;
begin
for v_temp in c loop
if(v_temp.sal < 2000)then
update emp set sal = sal * 2 where current of c;
elsif(v_temp.sal = 5000)then
delete from emp where current of c;
end if;
end loop;
commit;
end;
其中,“current of c”表示游标当前所指向的记录
分享到:
相关推荐
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持集合类型,如VARRAY(可变数组)和TABLE(表类型),这对于处理大量数据非常有用。 这本书的配套源代码可能会涵盖以下几个方面: ...
Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...
### PL/SQL手册——Oracle 10g #### 概述 PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内置编程语言,用于增强SQL的功能并支持更复杂的业务逻辑处理。它结合了SQL的数据操作能力和过程化的编程结构...
4. **游标**:在处理大量数据时,游标(Cursor)是非常重要的工具。教材会介绍如何声明、打开、提取和关闭游标,以及如何在循环中使用游标遍历结果集。 5. **记录和表操作**:PL/SQL提供了内置的DML(数据操纵语言...
在PL/SQL中,可以使用显式游标(Explicit Cursor)或隐式游标(Implicit Cursor)。 - 隐式游标是由数据库自动管理的游标,用于处理SELECT语句返回单行数据的情况。 - 显式游标需要用户在PL/SQL代码中声明、打开、...
4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...
在PL/SQL(Procedural Language/Structured Query Language)中,游标是处理单行或一组数据的关键工具,尤其在数据库编程中。游标允许程序员逐行操作数据集,而不仅仅是整个数据集作为一个整体。本篇文章将深入探讨...
Web PL/SQL报表制作过程是一种将数据库数据转化为用户友好、可编辑的HTML报表的方法,它结合了HTML语言和PL/SQL编程,使得开发者能够创建直观且实用的在线报表。以下是对这一过程的详细说明: 1. **制作报表模板**...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据库操作能力和Procedural Language的编程结构,用于在Oracle数据库环境中创建复杂的应用程序。在"Oracle PL/SQL实例精讲student数据库模式"中,我们将深入探讨...
4. 控制结构:PL/SQL提供了流程控制结构,包括IF...THEN...ELSIF...ELSE、CASE、FOR循环、WHILE循环,以及BEGIN...END块结构,用于编写复杂的程序逻辑。 5. SQL语句:PL/SQL可以直接嵌入SQL语句,执行查询、插入、...
4. **过程与函数**:PL/SQL中的过程(PROCEDURE)和函数(FUNCTION)是可重用的代码块,可以接受参数并返回结果。它们可以被其他PL/SQL代码或SQL语句调用。 5. **异常处理**:通过BEGIN-EXCEPTION-END结构,我们...
PL/SQL中的SELECT语句可以返回结果集,可以使用游标(Cursor)来处理这些结果集。游标可以是显式的也可以是隐式的。显式游标需要显式地声明、打开、提取数据和关闭。游标的属性包括%NOTFOUND、%FOUND、%ISOPEN和%...
根据提供的文件内容,我们可以从中提取到关于PL/SQL语言及其对数据库交互作用的丰富知识点,本知识点详解将围绕以下几个方面展开:PL/SQL基本操作、PL/SQL处理数据库记录、游标(Cursor)的概念及其在PL/SQL中的使用...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL的查询功能与过程式编程语言(如Pascal或C)的控制结构结合在一起,为数据库开发提供了一种强大的工具。这个“PL/...
PL/SQL 中有两种类型的游标:隐性游标(Implicit Cursors)和显性游标(Explicit Cursors)。 隐性游标(Implicit Cursors) 隐性游标是 PL/SQL 自动创建的游标,它们通常用于实现 SELECT 语句的结果集。隐性游标...
此外,PL/SQL还有游标(CURSOR),用于逐行处理查询结果。游标通常与FOR循环一起使用,以遍历和操作查询结果集。 最后,PL/SQL中的事务管理也是关键。你可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,或者`...
通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...
4. **CV1**: "CV1"可能代表"Cursor Variable 1",04-CV1.PC可能涉及到如何声明和使用游标变量,这是PL/SQL中处理查询结果集的常见方法。 5. **PRCMP**: "PRCMP"可能指的是过程或函数的编译,07-PRCMP.PC可能涵盖...
PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL语句与过程性编程语言结合在一起,为数据库管理提供了更强大的功能。本篇文章主要探讨PL/SQL的基础知识,包括其...