pl/sql---游标

游标

DECLARE
  CURSOR  A IS SELECT EMPNO,ENAME FROM EMP;
  B A%ROWTYPE;
BEGIN
  OPEN A;
  LOOP
    FETCH A INTO B;
    EXIT WHEN  A%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(B.EMPNO||' '||B.ENAME);
    
  END LOOP;
  CLOSE A;
END;   

-----LOOP
/

DECLARE
  CURSOR  A IS SELECT EMPNO,ENAME FROM EMP;
  B A%ROWTYPE;
BEGIN
  OPEN A;
  FETCH A INTO B;
  WHILE A%FOUND LOOP
    
   
    DBMS_OUTPUT.PUT_LINE(B.EMPNO||' '||B.ENAME);
    FETCH A INTO B;
  END LOOP;
  CLOSE A;
END;  

-----WHILE 加一次读取

/
DECLARE
  CURSOR  A IS SELECT EMPNO,ENAME FROM EMP;
  B A%ROWTYPE;

BEGIN

  FOR C IN A LOOP
    DBMS_OUTPUT.PUT_LINE(C.EMPNO||' '||C.ENAME);
  END LOOP;

END;  

-----FOR 省略开启读取和关闭

DECLARE
  CURSOR  A IS SELECT EMPNO,ENAME FROM EMP;
  B A%ROWTYPE;
BEGIN
  OPEN A;
  IF A%ISOPEN THEN           ------%ISOPEN
    DBMS_OUTPUT.PUT_LINE('游标已开启');
  ELSE
    DBMS_OUTPUT.PUT_LINE('游标未开启');
  END IF;
  CLOSE A;
   IF A%ISOPEN THEN 
    DBMS_OUTPUT.PUT_LINE('游标已开启');
  ELSE
    DBMS_OUTPUT.PUT_LINE('游标未开启');
  END IF;
  
END;   
%ISOPEN  查看游标是否开启 

-----隐式游标

DECLARE

BEGIN
  DELETE FROM EMP1 WHERE DEPTNO=10;
  
  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
  COMMIT;
END;
BEGIN
  DML
  INSERT INTO 日志表 VALUES (SQL%ROWCOUNT);
  COMMIT;
END;

/
BEGIN
  FOR A IN (SELECT * FROM EMP1) LOOP
    DBMS_OUTPUT.PUT_LINE(A.EMPNO||A.ENAME||A.SAL||A.JOB);
  END LOOP;
END;

---动态游标
DECLARE
  TYPE AAA IS REF CURSOR;
  CUR_A AAA;
  E   EMP%ROWTYPE;
  D   DEPT%ROWTYPE;
BEGIN
  OPEN CUR_A FOR SELECT * FROM EMP;
  LOOP
    FETCH CUR_A INTO E;
    EXIT WHEN CUR_A%NOTFOUND;
    DBMS_OUTPUT.put_line(E.ENAME);
  END LOOP;
  
  CLOSE CUR_A;
  
END;

------------ERROR


                
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值