一:普通游标
declare
--定义record类型变量
type v_record is record
(title labor.xland.title%type,state labor.xland.title%type);
--定义字符串类型变量
v_title labor.xland.title%type;
--定义一个游标
cursor c1 is
select title from labor.xland;
begin
open c1;--打开游标
loop
fetch c1 into v_title;--把游标中的数据存入变量,可以有多个变量
if c1%found then--如果找到数据,找不到数据为notfound
dbms_output.put_line(v_title);
else
dbms_output.put_line('已经处理完结果集');
exit;--退出循环
end if;
end loop;
close c1;--关闭游标
end;
输出结果
new xland
123
xland
123
xland
已经处理完结果集
二:有参游标
declare
--定义record类型变量
type v_record is record
(title labor.xland.title%type,state labor.xland.title%type);
--定义字符串类型变量
v_title labor.xland.title%type;
--定义有参数的游标
cursor c1(v_no number) is
select title from labor.xland where state > v_no;
begin
open c1(0);--打开游标,传递参数
loop
fetch c1 into v_title;--把游标中的数据存入变量,可以有多个变量
if c1%found then--如果找到数据,找不到数据为notfound
dbms_output.put_line(v_title);
else
dbms_output.put_line('已经处理完结果集');
exit;--退出循环
end if;
end loop;
close c1;--关闭游标
end;
输出结果
123
xland
123
xland
已经处理完结果集
三:有返回值的游标
declare
--定义一个类型
type t_record is record
(title labor.xland.title%type,state labor.xland.state%type);
--定义v_record类型的变量
v_record t_record;
--定义字符串类型变量
v_title labor.xland.title%type;
--定义有返回值的游标
cursor c1(v_no number) return t_record is
select title,state from labor.xland where state > v_no;
begin
open c1(v_no => 0);--打开游标,传递参数(参数的另一种传递方式)
loop
fetch c1 into v_record;--把游标中的数据存入变量,可以有多个变量
exit when c1%notfound;
dbms_output.put_line(v_record.title||' '||to_char(v_record.state));
end loop;
close c1;--关闭游标
end;
输出结果
123 3
xland 3
123 3
xland 3
四:运行过程中获取游标中的内容
declare
--定义游标
cursor c1(v_no number) is
select * from labor.xland where state > v_no;
--定义变量为游标的行类型
v_record c1%rowtype;
begin
open c1(v_no => 0);--打开游标,传递参数(参数的另一种传递方式)
loop
fetch c1 into v_record;--把游标中的数据存入变量,可以有多个变量
exit when c1%notfound;
dbms_output.put_line(v_record.title||' '||to_char(v_record.state));
end loop;
close c1;--关闭游标
end;
输出结果
123 3
xland 3
123 3
xland 3
五:隐式游标
declare
v_rows number;
begin
update labor.xland set xland.title = 'new xland' where xland.state>0;
v_rows := sql%rowcount;
dbms_output.put_line(to_char(v_rows));
end;
更多隐式游标属性请看此系列文章的附录:
常用函数
输出结果为受影响的行数
不能对隐式游标执行显示游标类似的操作,如:
open fetch close等
六:用for循环简化游标的操作
declare
--定义游标
cursor c1(v_no number default 0) is--默认值为0
select * from labor.xland where state > v_no;--定义变量为游标的行类型
v_record c1%rowtype;
begin
for v_record in c1() loop
dbms_output.put_line(v_record.title||' '||to_char(v_record.state));
end loop;
end;
输出结果
new xland 3
new xland 3
new xland 3
new xland 3
注意此游标的参数有个默认值
for循环使得我们的程序不必再写 open fetch close等操作了
它已经给我们实现了
七:在游标中更新或删除数据
declare
--定义游标
cursor c1(v_no number) is
select * from labor.xland where state > v_no for update;--注意最后的for update
--定义变量为游标的行类型
v_record c1%rowtype;
begin
open c1(v_no => 0);--打开游标,传递参数(参数的另一种传递方式)
loop
fetch c1 into v_record;--把游标中的数据存入变量,可以有多个变量
exit when c1%notfound;
if v_record.state=3 then
update xland set state = 6 where current of c1;--注意where子句
dbms_output.put_line('更新了一条数据');
end if;
end loop;
commit;--提交更新
close c1;--关闭游标
end;
当使用for update打开游标后就可以用current of cursor_name来更新数据了
分享到:
相关推荐
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。
在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...
PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...
### PL/SQL 学习笔记知识点详解 #### 1. PL/SQL 基本结构 - **DECLARE**: 在此部分声明变量、常量、数据类型及游标。 - **BEGIN**: 主程序体开始,可以包含任何合法的PL/SQL语句。 - **EXCEPTION**: 异常处理部分,...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展语言,用于处理数据库中的数据和实现复杂的业务逻辑。以下是对PL/SQL的基础知识进行的详细阐述: 1. **匿名块与命名块**: ...
PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL(结构化查询语言)与过程式编程语言相结合,为数据库管理提供了强大的编程能力。以下是对PL/SQL的一些核心知识点...
Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...
PL/SQL,全称是Procedural Language/Structured Query Language,...PL/SQL的教程如“PLSQL 笔记版教程 PDF”将涵盖这些基本概念以及更高级的主题,帮助学习者系统地掌握这门语言,从而在Oracle数据库开发中游刃有余。
PL/SQL 学习笔记总结 PL/SQL 是 Oracle 在标准 SQL 语言上的扩展,提供了更多的编程功能,例如定义变量和常量、使用条件语句和循环语句、例外处理等。使用 PL/SQL 可以提高开发效率和数据库性能。 PL/SQL 的优点 ...
### Oracle 10g PL/SQL 实战笔记关键知识点解析 #### 一、PL/SQL 概述 - **PL/SQL** (Procedural Language for SQL) 是 Oracle 数据库的一种扩展,它允许用户在 SQL 的基础上进行更复杂的程序设计。 - **特性**: ...
Oracle数据库管理员(DBA)的PL/SQL学习笔记主要包括了以下几个知识点: 一、PL/SQL基本的语法格式 PL/SQL是Oracle提供的过程化语言,其基本的语法格式如下: - 声明部分(DECLARE):用于声明变量、常量、游标、...
第五版的《Oracle PL SQL Programming》是一本深入学习PL/SQL的权威指南,包含了丰富的实例和详尽的解释,旨在帮助读者掌握这一重要的数据库编程技术。 本书主要涵盖以下几个方面的知识点: 1. **PL/SQL基础知识**...