当SELECT语句从数据库中返回的记录多于一条时,就可以使用游标(cursor)。游标可以理解为可以一次访问一个的一组记录。SELECT语句将列提前到游标中,然后根据游标取得记录。使用游标时需要以下5个步骤:
1.声明一些变量,用于保存SELECT语句返回的列值
2.声明游标,并指定SELECT语句
3.打开游标
4.从游标获取记录
5.关闭游标
下面是一个例子(循环取出dept表中的信息):
--游标
--声明变量
SET SERVEROUTPUT ON;
DECLARE
v_deptno dept.deptno%TYPE;
v_dname dept.dname%TYPE;
v_loc dept.loc%TYPE;
--声明游标
CURSOR find_dept_inf IS
SELECT deptno, dname, loc
FROM dept
ORDER BY dname;
BEGIN
--打开游标
OPEN find_dept_inf;
LOOP
--获取记录
FETCH find_dept_inf
INTO v_deptno, v_dname, v_loc;
EXIT WHEN find_dept_inf%NOTFOUND;
dbms_output.put_line(
'v_deptno = ' || v_deptno ||
', v_dname = ' || v_dname ||
', v_loc = ' || v_loc
);
END LOOP;
--关闭游标
CLOSE find_dept_inf;
END;
/
当使用FOR循环时,可以不显式地打开和关闭游标--FOR循环会自动执行这些操作:
--游标与for循环
SET SERVEROUTPUT ON;
DECLARE
CURSOR find_dept_inf IS
SELECT deptno, dname, loc
FROM dept
ORDER BY dname;
BEGIN
FOR v_dept IN find_dept_inf LOOP
dbms_output.put_line(
'deptno = ' || v_dept.deptno ||
', dname = ' || v_dept.dname ||
', loc = ' || v_dept.loc
);
END LOOP;
END;
/
可以发现利用FOR循环代码简洁了许多