9.1. 游标的定义
定义游标:
DECLARE cur_Categories INSENSITIVE CURSOR
FOR SELECT CategoryID,CategoryName FROM Categories;
从游标中检索行的操作称为提取。提取选项如下:
? FETCH FIRST 提取游标中的第一行。
? FETCH NEXT 提取上次提取行之后的行。
? FETCH PRIOR 提取上次提取行之前的行。
? FETCH LAST 提取游标中的最后一行。
? FETCH ABSOLUTE n
如果 n 为正整数,则提取游标中从第 1 行开始的第 n 行。如果 n 为负整数,则提取游标中的倒数第 n 行。如果 n 为 0,则没有行被提取。
? FETCH RELATIVE n
提取上次所提取行之后的第 n 行。如果 n 为正数,则提取所上次提取行之后的第 n 行。如果 n 为负数,则提取上次所提取行之前的第 n 行。如果 n 为 0,则同一行被再次提取。
9.2. 检索游标
DECLARE Teacher_Cursor SCROLL CURSOR
FOR
SELECT tname,dname,age FROM Teacher ORDER BY age
OPEN Teacher_Cursor --打开游标
DECLARE @T_Name CHAR(12),@T_Department CHAR(12),@T_Age INT
FETCH LAST FROM Tracher_Cursor INTO @T_Name,@T_Department,@T_Age --跳到最后一行
PRINT @T_Name + @T_Department + CAST(@T_Age AS CHAR(2))
FETCH PRIOR FROM Tracher_Cursor INTO @T_Name,@T_Department,@T_Age --跳到倒数第二行
PRINT @T_Name + @T_Department + CAST(@T_Age AS CHAR(2))
DECLARE @CategoryId Int
DECLARE @CategoryName Varchar(50)
OPEN cur_Categories
FETCH NEXT FROM cur_Categories INTO @CategoryId,@CategoryName
WHILE @@Fetch_Status = 0
BEGIN
PRINT '品种ID:' + @CategoryId + '产品名称:' + @CategoryName
FETCH NEXT FROM cur_Categories INTO @CategoryId,@CategoryName
END
9.3. 基于游标的DELETE
语法如下:
DELETE FROM table_name WHERE CURRENT OF cursor_name
注:
1、 WHERE子句必须与CURRENT OF一起使用,用来确定打开的游标。
2、 如果游标的SELECT子句中包含有ORDER BY子句,DBMS将把游标限定为READ ONLY,因此不能在相同的游标SELECT语句中同时有ORDER BY和FOR UPDATE语句。
DECLARE BoyTeacher_Cursor CURSOR
FOR
SELECT * FROM TEACHER WHERE TSEX='male'
FOR UPDATE --说明游标可更新
OPEN BoyTeacher_Cursor
FETCH FROM BoyTeacher_Cursor
DELETE FROM TEACHER WHERE CURRENT OF BoyTeacher_Cursor --删除第一行
FETCH FROM BoyTeacher_Cursor
FETCH FROM BoyTeacher_Cursor
DELETE FROM TEACHER WHERE CURRENT OF BoyTeacher_Cursor --删除第三行
CLOSE BoyTeacher_Cursor
9.4. 基于游标的UPDATE
语法:UPDATE table_name SET WHERE CURRENT OF cursor_name
DECLARE GrilTeacher_Cursor CURSOR
FOR
SELECT SAL FROM TEACHER WHERE TSEX='female'
FOR UPDATE --说明游标可更新
DECLARE @Avg_Sal INT,@T_Sal INT
SELECT @Avg_Sal = AVG(SAL) FROM TEACHER WHERE TSEX='female'
OPEN GrilTeacher_Cursor
FETCH FROM GrilTeacher_Cursor
INTO @T_Sal
WHERE @@FETCH_STATUS = 0 --FETCH执行成功
BEGIN
IF @T_Sal IS NULL
UPDATE TEACHER SET SAL = @Avg_Sal
WHERE CURRENT OF GrilTeacher_Cursor
FETCH FROM GrilTeacher_Cursor INTO @T_Sal--游标下移一条记录
END
CLOSE GrilTeacher_Cursor
9.5. 游标的调用
DECLARE cur_Categories INSENSITIVE CURSOR
FOR SELECT CategoryID,CategoryName FROM Categories;
9.6. 游标的关闭
CLOSE cur_Categories
9.7. 游标的删除
DEALLOCATE cur_Categories
分享到:
相关推荐
Oracle数据库游标是数据库管理系统中用于处理查询结果的一种机制,它允许程序逐行处理查询结果,而不是一次性加载所有数据。在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中...
数据库游标是数据库管理系统中的一个重要概念,主要用于处理和操作数据集。在Oracle数据库中,游标扮演着不可或缺的角色,尤其在进行复杂的SQL操作和程序逻辑控制时。本小练习主要目的是帮助你理解和掌握如何在...
数据库游标的使用 数据库游标是数据库系统中的一种机制,允许开发者逐行地读取查询结果集,并对每一行记录进行操作。下面是关于数据库游标的使用的详细知识点: 1. 为什么要使用游标? 在查询结果集中逐行地读取...
Oracle数据库中的游标是PL/SQL编程中一种重要的控制结构,它允许程序逐行处理查询结果,而不是一次性处理所有结果。游标对于处理大量数据或需要根据每行数据执行不同操作的情况非常有用。以下是关于Oracle游标使用的...
Oracle 数据库游标的使用方法 Oracle 数据库游标是指在查询返回结果超过一行时,需要使用的显式游标。用户不能使用 select into 语句,而是需要使用游标来处理多行查询结果。在 PL/SQL 中,隐式游标会在查询开始时...
oracle数据库游标实验报告!oracle数据库游标实验报告!oracle数据库游标实验报告!
### 数据库游标使用详解:Oracle数据库视角 在数据库领域,游标(Cursor)是一种用于处理数据查询结果集的强大工具,尤其在Oracle数据库中,游标的应用极为广泛且功能强大。本文将深入探讨Oracle数据库中游标的基本...
Oracle数据库游标是数据库编程中的一个重要概念,尤其在处理大量数据时,它们提供了一种有效且灵活的方法。游标允许程序逐行访问查询结果集,而不是一次性加载所有数据。这在处理复杂的数据操作,如循环处理、条件...
整理的Oracle数据库游标使用大全 SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它同时引入了更强的程序逻辑。 PL/SQL支持DML命令和SQL的事务控制语句。DDL在PL/SQL中不被支持,这就意味作在PL/...
MySql存储过程,游标的使用方法,速度极快!
数据库游标使用方法 数据库游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。由系统或用户以变量的形式定义。用户可以用 SQL 语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理,主...
### 数据库游标:探索数据世界的导航仪 #### 引言:数据库游标的基本概念 在数据库领域,游标(Cursor)是一个极为重要的概念。它为开发者提供了一种高效且灵活的方式来与数据交互,尤其在处理大型数据集或执行...
在SQL Server中,数据库游标和函数是两个非常重要的概念,它们在数据处理和数据库操作中扮演着不可或缺的角色。游标允许我们逐行处理查询结果,而函数则提供了丰富的计算和逻辑处理能力。 首先,让我们深入理解SQL ...
Oracle数据库游标使用大全
Oracle 数据库游标、存储过程和触发器 Oracle 数据库是一种关系型数据库管理系统,它提供了多种机制来提高数据库的性能和安全性。在本文中,我们将讨论 Oracle 数据库中的三个重要概念:游标、存储过程和触发器。 ...
数据库游标是数据库管理系统提供的一种机制,允许程序员按需逐行处理查询结果集,而非一次性处理整个结果集。在SQL中,游标尤其在处理复杂逻辑和交互式应用时非常有用,例如需要对数据集进行迭代处理、条件判断或...
数据库游标是管理和应用开发中不可或缺的工具,它提供了一种高效且灵活的方式来处理数据库中的数据。通过正确地声明、打开、获取数据、关闭以及释放游标,开发者可以最大化地利用数据库的性能,同时保持代码的简洁性...