浅谈Oralce的Cursor(游标)

一、概念

  Cursor(游标)用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。

  它的结果集相当于Oralce中的一个视图。

二、用途和描述

  Cursor(游标)主要用在Oracle的Pl/Sql的程序里面,如:存储过程、函数等。它做为一个变量类型出现。

      Orale的Cursor(游标)分为两种类型:

      1.静态游标:

  分为显式游标和隐式游标。

  2.REF游标:

  是一种引用类型,类似于指针。

 

 三、结构与构成

      (一)显示Cursor:

     1、构成方式

 

      CURSOR 游标名(参数) [返回值类型] IS {Select语句}

 

      参数部分可以为空

 

     如定义游标C_R可以使用以下方式:

   

     CURSOR C_R IS SELECT A,B FROM TABLE_NAME;

   

     2、生命周期

  

      a.打开游标(OPEN)

 

  解析,绑定。。。不会从数据库检索数据

 

  b.从游标中获取记录(FETCH INTO)

 

  执行查询,返回结果集。通常定义局域变量作为从游标获取数据的缓冲区。

 

  c.关闭游标(CLOSE)

     

      3、实例

 

CREATE OR REPLACE PROCEDURE P_W_CURSOR AS
  CURSOR C_TAB IS
    SELECT SJB FROM T_TABLE;
  CURSOR C_FIELD(V_TABLE VARCHAR2) IS
    SELECT DECODE(DATA_TYPE, 'VARCHAR2', 'Y', 'N') LX, COLUMN_NAME
      FROM ALL_TAB_COLUMNS A
     WHERE TABLE_NAME = V_TABLE
     ORDER BY COLUMN_ID;
  V_FIE  VARCHAR2(30000);
  V_SQL  VARCHAR2(32000);
BEGIN
      FOR C_T IN C_TAB LOOP

      V_SQL := 'CREATE OR REPLACE V_' || C_T.SJB || ' AS ' || CHR(13);
      FOR C_F IN C_FIELD(C_T.SJB) LOOP
        V_FIE := C_F.COLUMN_NAME;
        IF C_F.LX = 'Y' THEN
          IF V_FIE IS NULL THEN
            V_FIE := ' HEXTORAW(UTL_RAW.CASE_TO_RAW(' || C_F.COLUMN_NAME || '))';
          ELSE
            V_FIE := V_FIE || ', HEXTORAW(UTL_RAW.CASE_TO_RAW(' ||
                     C_F.COLUMN_NAME || '))';
          END IF;
        ELSE
          IF V_FIE IS NULL THEN
            V_FIE := C_F.COLUMN_NAME;
          ELSE
            V_FIE := V_FIE || ', ' || C_F.COLUMN_NAME;
          END IF;
        END IF;
      END LOOP;
      V_SQL := V_SQL || V_FIE || CHR(13) || ' FROM ' || C_T.SJB;

      EXECUTE IMMEDIATE V_SQL;     --创建视图
    END LOOP;
END;

 

      4、实例说明:

           这是一个创建实力的存储过程,即把T_TABLE表里的SJB字段的表名创建成对应视图。这里是通过两个CURSOR实现的(即C_TAB和C_FIELD,一个带有参数,另外一个没有。请注意参数的使用方法)。

           上述实例也可以使用Loop循环,写法上只是稍有不同。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值