1、什么是游标
游标是SQL的一个内存工作区,用以临时存储从数据库中提取的数据集。可以理解为java中的集合或jdbc中的resultSet。
2、游标的使用
显示游标使用的四个步骤:
1)定义游标
语法:
CURSOR cursor_name[(parameter[, parameter]…)] IS 查询语句;
例:
declare
CURSOR test_cursor IS
SELECT title,author FROM web_article;
2)打开游标
open 游标名
例:
open test_cursor;
3)提取数据
语法:
FETCH cursor_name INTO {variable_list | record_variable };
4)关闭游标
CLOSE cursor_name;
3、游标的属性
- %FOUND 布尔型属性,当最近一次读记录时成功返回,则值为TRUE;
- %NOTFOUND 布尔型属性,与%FOUND相反;
- %ISOPEN 布尔型属性,当游标已打开时返回 TRUE;
- %ROWCOUNT 数字型属性,返回已从游标中读取的记录数
常用次来判断游标的结束
实例:
declare
--定义变量
v_name h_user.name%TYPE;
v_dept h_user.dept%TYPE;
--定义游标
cursor user_cursor(dept_no number default 1 )
is select name,dept from H_USER where dept<dept_no;
begin
--打开游标 传递参数的值
open user_cursor(dept_no => 5);
--遍历游标
loop
--取游标中的值
fetch user_cursor into v_name,v_dept;
--判断循环结束条件
exit when user_cursor%NOTFOUND;
DBMS_OUTPUT.put_line(v_name||':'||v_dept);
end loop;
--关闭游标
close user_cursor;
end;
4、游标的for循环
游标FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能;
语法:
FOR 游标中单条记录变量 IN 有标名[参数]
LOOP
-- 游标数据处理代码
END LOOP;
示例:
declare
--定义游标
cursor user_cursor(dept_no number default 1 )
is select name,dept from H_USER where dept<dept_no;
begin
--for循环遍历游标
for user_rec in user_cursor(5)
loop
DBMS_OUTPUT.put_line(user_rec.name||':'||user_rec.dept);
end loop;
end;