欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle中游标的使用(一)

程序员文章站 2022-07-02 14:26:47
...

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

  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;   

输出结果是:
oracle中游标的使用(一)
怎么回事? 怎么员工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的时候,一定要注意字段的顺序,可以先查看该表。

正确的输出结果是:
oracle中游标的使用(一)

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

例子演示二

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;

结果是:
oracle中游标的使用(一)