1、光标实际上就是一个集合;
2、光标的属性
%found 取到值则返回true;没取到值则返回false;
%notfound 没取到值则返回true;取到值则返回false;
%isopen 光标是否打开;
%rowcount 影响的行数;
3、光标数的限制
默认在同一个会话中,可以打开300个光标。
4、无参数的光标
例子:循环打印出员工表中员工姓名和工资
DECLARE
--定义光标
CURSOR CEMP IS SELECT T.NAME ,T.SAL FROM EMP T ;
DNAME EMP.NAME%TYPE;
DSAL EMP.SAL%TYPE;
BEGIN
--打开光标
OPEN CEMP;
LOOP
--取一条数据
FETCH CEMP INTO DNAME,DSAL ;
EXIT WHEN CEMP%NOTFOUND;
DBMS_OUTPUT.put_line(DNAME||'的工资:'||DSAL);
END LOOP;
--关闭光标
CLOSE CEMP;
END;
打印结果:
5、有参数的光标
例:循环打印出员工表中部门为1的员工姓名
DECLARE
--定义带参数的光标
CURSOR CEMP(DEPTNO1 VARCHAR2) IS SELECT T.NAME FROM EMP T WHERE T.DEPTNO =DEPTNO1;
DNAME EMP.NAME%TYPE;
BEGIN
--打开光标
OPEN CEMP('1');
LOOP
FETCH CEMP INTO DNAME ;
EXIT WHEN CEMP%NOTFOUND;
DBMS_OUTPUT.put_line(DNAME);
END LOOP;
--关闭光标
CLOSE CEMP;
END;
打印结果:
注: 取光标中一条数据:
fetch 光标名 into 变量名;
这条语句有两个作用
<1>将当前指针指向的记录返回;
<2>将指针指向下一条记录。