//游标属性
--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;
Oracle 游标
最新推荐文章于 2024-08-09 15:00:21 发布