原文链接:
https://www.gbase.cn/community/post/3982
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在数据库编程中,处理复杂的数据集是一项常见任务。游标(CURSOR)作为数据库操作中的一项重要工具,允许我们逐行处理查询结果,极大地提升了数据处理的灵活性和效率。本文将深入探讨游标的概念、类型、属性以及在实际编程中的应用。
一、游标的概念
游标(CURSOR):游标是把从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作。
游标是用在plsql块中的!!!!(declare..begin..end; procedure)
通俗解释:数据库中,没有数组或集合的概念,所以如果储存多个结果集呢?使用游标!
select * from user; 如使用游标储存该结果集
游标基本原理:逐行处理查询结果,以编程的方式访问数据
二、游标的作用
游标是用来处理使用SELECT语句从数据库中检索到的多行记录的工具。借助于游标的功能,数据库应用程序可以对一组记录逐条进行处理,每次处理一行。
三、游标的类型
- 显式游标(Explicit Cursor):显式游标需要定义声明,在使用前要打开和获取,使用完毕后要关闭。多用于返回多行的SELECT语句
- 隐式游标(Implicit Cursor):在执行一个SQL语句时,服务器将自动创建一个隐式游标,该游标是内存中的工作区,存储了执行SQL语句的结果,可通过游标的属性获得SQL的执行结果及状态信息。多用于只返回一行的SQL语句。
四、游标的主要属性
- %FOUND 布尔型属性,当SQL语句至少影响一行时为TRUE,否则为FALSE
- %NOTFOUND 布尔型属性,当SQL语句没有影响的行时为TRUE,否则为FALSE
- %ISOPEN 布尔型属性,当游标已打开时返回TRUE,否则为FALSE(对用户而言,隐式游标永远是false)
- %ROWCOUNT 数字型属性,返回受到SQL影响的行数
(ORACLE在创建隐式游标时,默认的游标名为SQL)
注意:
属性名与游标名之间没有空格。
游标的属性只能在PL/SQL块中使用,而不能在SQL语句中使用
例: 将PRODUCTS表中类型为1的所有产品的单价打9折,并显示该更新所影响的行数.
BEGIN
UPDATE products
SET unitprice=unitprice*0.9
WHERE categoryid=1;
IF SQL%FOUND THEN
dbms_output.put_line('更新了'||SQL%ROWCOUNT||'条记录');
ELSE
dbms_output.put_line('没有更新记录');
END IF;
END;
上面是隐式游标
1、显示游标
1、定义游标
在使用显示游标之前,必须先在声明部分定义游标,
其定义语法如下:
CURSOR cursor_name[(parameter,…)] IS select_statement;
说明: 参数parameter形式如下:para_name [IN] data_type [:=|DEFAULT value]
2、打开游标
当打开游标时,ORACLE会执行游标所对应的SELECT语句,并将结果存放到结果集,
其定义语法如下:
OPEN cursor_name[(parameter,…)];
3、提取数据
FETCH