现在的位置: 首页 > 综合 > 正文

Oracle 游标

2013年07月21日 ⁄ 综合 ⁄ 共 1650字 ⁄ 字号 评论关闭
//游标属性  
--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;

抱歉!评论已关闭.