//游标属性 --1.%bulk_exceptions:用于批处理或者Bulk Collect操作,为这种操作过程中产生的异常提供了相关的信息 --2.%bulk_rowcount:用于批处理或者Bulk Collect操作,提供在操作过程中更改的行数的信息 --3.%found:用来检查fetch语句是否取到了记录,返回boolean类型 --4.%isopen:检查游标是否打开,false表示右边关闭,true表示右边打开 --5.%notfound:如果fetch没有取到记录,它就返回true,否则返回false --6.%rowcount:检查任意给定的时刻,从游标中获取记录的行数,返回一个数字 //下面是几个游标属性的实例 set serveroutput on; declare cursor c is select * from emp; emp_row c%rowtype; begin if not c%isopen then open c; end if; dbms_output.put_line('循环之前游标属性%rowcount='||c%rowcount); loop fetch c into emp_row; exit when c%notfound;//注意,一定要有循环终止条件 dbms_output.put_line('取到第'||c%rowcount||'行数据'); end loop; dbms_output.put_line('循环结束之后游标属性%rowcount='||c%rowcount); end; ---------------------------------------------------------------------------------------- DECLARE CURSOR MY_CUR IS SELECT * FROM EMP; MY_REC EMP%ROWTYPE; BEGIN OPEN MY_CUR; --WHILE MY_CUR%ISOPEN FETCH MY_CUR INTO MY_REC; WHILE MY_CUR%FOUND LOOP DBMS_OUTPUT.PUT_LINE(MY_REC.ENAME ||','||MY_REC.JOB||','||MY_REC.SAL); FETCH MY_CUR INTO MY_REC; END LOOP; CLOSE MY_CUR; END; -------------------------------------------------------------------------------------- DECLARE CURSOR MY_CUR(C_ID NUMBER) IS SELECT ENAME FROM BT WHERE EMPNO=C_ID; MY_REC BT.ENAME%TYPE; BEGIN OPEN MY_CUR(7788); LOOP FETCH MY_CUR INTO MY_REC; DBMS_OUTPUT.PUT_LINE(MY_REC); EXIT WHEN MY_CUR%NOTFOUND; END LOOP; CLOSE MY_CUR; END; --------------------------------------------------------------------------------- DECLARE CURSOR CUR_PARA(C_ID NUMBER) IS SELECT ENAME FROM BT WHERE EMPNO=C_ID; NAME_REC BT.ENAME%TYPE; BEGIN IF CUR_PARA%ISOPEN THEN DBMS_OUTPUT.PUT_LINE('The Cursor is open'); ELSE OPEN CUR_PARA(7839); END IF; LOOP FETCH CUR_PARA INTO NAME_REC ; DBMS_OUTPUT.PUT_LINE(NAME_REC); EXIT WHEN CUR_PARA%NOTFOUND; END LOOP; CLOSE CUR_PARA; END;