oracle中游标的使用(一)

一 .使用游标的四个步骤:

  1. 定义游标

    CURSOR  <游标名称>  IS  <select语句> ;    
    
  2. 打开游标
    OPEN <游标名称> ;
  3. 取出使用游标
    FETCH <游标名称> INTO 变量1,变量2…..变量n;
    或者
    FETCH <游标名称> INTO 行对象;
  4. 关闭游标
    CLOSE <游标名称>;

二 游标的属性

  1. %NOTFOUND
    如果取出游标失败,也就是FETCH 语句失败,则该属性是 true,否则为 false
  2. %FOUND
    如果取出游标成功,也就是FETCH语句成功,该属性为 true,否则为 false
  3. ROWCOUNT
    返回游标当前行的行数
  4. ISOPEN
    如果游标是开着的,则返回 true ,否则返回false
例子演示
declare
    --定义游标 ,将 T-EMP表中的 EMPID,EMPNAME,EMPTELEP放入游标中
    CURSOR C_EMP IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP;
    P_EMPID T_EMP.EMPID%TYPE;
    P_EMPNAME T_EMP.EMPNAME%TYPE;
    P_EMPTELEP T_EMP.EMPTELEP%TYPE;
BEGIN
    --打开游标
    OPEN C_EMP; 
    LOOP
    --取出游标
        FETCH C_EMP INTO P_EMPNAME,P_EMPID,P_EMPTELEP ;
    IF C_EMP%FOUND THEN 
       dbms_output.put_line('员工id 是' || P_EMPID || ',员工姓名是' || P_EMPNAME || ',员工电话是' || P_EMPTELEP);
    END IF;
    EXIT WHEN C_EMP%NOTFOUND;  --当游标找不到时,退出循环
END LOOP;
END;   

输出结果是:
这里写图片描述
怎么回事? 怎么员工id 是 姓名了,姓名的结果是 id值,注意:
我在 定义 游标的 语句是:
CURSOR C_EMP IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP;
EMPID 在前面,EMPNAME在后面
但是我在取出游标的时候:
FETCH C_EMP INTO P_EMPNAME,P_EMPID,P_EMPTELEP ;
在这里,我将顺序换了一下,所以结果就出错了,可以得知:
* 我在定义游标的时候,放入字段的顺序是什么样子的,取出游标的时候,也要按什么样子的顺序取出 *
那么,当我定义游标是SELECT * FROM T_EMP的时候,一定要注意字段的顺序,可以先查看该表。

正确的输出结果是:
这里写图片描述

如果是 对于指定的 字段值的 结果,就需要使用带参数的游标

例子演示二
declare
    --给游标设定参数,部门ID,注意,一定要where ID = P_ID
    CURSOR C_EMP(P_ID T_EMP.ID%TYPE) IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP WHERE ID = P_ID;
    --在定义 行对象 的时候,可以将类型定义成游标的类型
    --在取 行对象 中每个字段的时候,可以 行对象.字段名 ,具体看下面输出
    P_EMP C_EMP%ROWTYPE;
BEGIN
    --打开游标的时候,给参数赋值,指定部门编号是 111
    OPEN C_EMP(111);--放入参数
    FETCH C_EMP INTO P_EMP;
    WHILE C_EMP%FOUND
      LOOP
      --取出行对象的每个字段,可以  行对象.字段  ,该字段是表中的真实字段名
        DBMS_OUTPUT.put_line('员工的编号是' || P_EMP.EMPID || ',员工的姓名是' || P_EMP.EMPNAME || ',员工的电话是' || P_EMP.EMPTELEP);
        --在LOOP循环中,取出游标,并移动到下一个位置
        FETCH C_EMP INTO P_EMP;
      END LOOP;
     CLOSE C_EMP;
END;

结果是:
这里写图片描述

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值