ORACLE游标

本文深入探讨了SQL游标的概念,包括隐式游标、显式游标、动态游标等,并详细介绍了如何使用ref游标和游标变量进行动态SQL处理。通过示例代码展示了如何遍历表数据并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游标分为 隐式游标,显式游标,动态游标。
如果想在运行的时候动态确定结果集,就要使用ref游标和游标变量。 创建ref游标需要两个步骤:1 声明ref cursor类型 2 声明 ref cursor类型变量。 语法如下: type ref_cursor_name is ref cursor [return record_type] 其中,return 用于指定游标提取结果集的返回类型。有return表示是强类型ref游标, 没有return表示是弱类型的游标。弱类型游标可以提取任何类型的结果集.

在PL/SQL中可以执行动态SQL语句,execute immediate 语句只能语句处理返回单行 或没有返回的SQL语句,ref游标则可以处理返回结果集的动态SQL。ref游标的声明 方法与普通ref游标相同,只是在open时指定了动态SQL字符串。 open cursor_name for dynamic_select_string [using bind_argument_list]

隐式游标SQL%ISOPEN,SQL%FOUND,SQL%NOFOUND,SQL%ROWCOUNT

 

游标遍历一个表

DECLARE
CURSOR C IS SELECT * FROM EMP;
L_REC EMP%ROWTYPE;
BEGIN
OPEN C;
LOOP
FETCH C INTO L_REC;
EXIT WHEN C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);
END LOOP;
END;


 

DECLARE
CURSOR C IS SELECT * FROM EMP;
L_REC EMP%ROWTYPE;
BEGIN
FOR L_REC IN C LOOP
DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);
END LOOP;
END;

 比较上面两个程序段可以看到,若用FOR循环不需要OPEN CURSOR;而使用fetch 则需要OPEN CURSOR

DECLARE
L_REC EMP%ROWTYPE;
TYPE REF_MYCURSOR IS REF CURSOR;
AA REF_MYCURSOR;
BEGIN
  OPEN AA FOR SELECT * FROM EMP;
  LOOP
    FETCH AA INTO L_REC;
    EXIT WHEN AA%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);
  END LOOP;
END;


 

DECLARE
CURSOR C_DEPT(P_DEPTNO NUMBER)
IS
SELECT * FROM EMP WHERE EMP.DEPTNO=P_DEPTNO;
R_EMP EMP%ROWTYPE;
BEGIN
FOR R_EMP IN C_DEPT(20) LOOP
DBMS_OUTPUT.PUT_LINE(R_EMP.ENAME);
END LOOP;
END;


 

转载于:https://www.cnblogs.com/javaTest/archive/2012/05/02/2589521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值