• 当SELECT返回多行数据时——游标的运用


      开篇

      当在PL/SQL块中执行查询语句(SELECT)和数据操纵语句(DML)时,Oracle会为其在内存中分配上下文区(Context Area),即缓冲区,游标是指向上下文区的指针。对于数据操纵语句和单行SELECT INTO语句,Oracle会为他们分配隐含游标。

      显示游标

      PL/SQL包含隐含游标和显示游标两种游标类型,其中隐含游标用于处理SELECT INTO和DML语句,显示游标则专门用于处理SELECT语句返回的多行数据。

    View Code
    create or replace procedure TEST_CURSOR is
    
        --1、定义显示游标
        CURSOR c_rows IS
            SELECT col1, col2 FROM t;
            
        v_col1 t.col1%type;
        v_col2 t.col2%type;
    begin
        --2、打开游标
        OPEN c_rows;
        LOOP
            --3、提取数据
            FETCH c_rows INTO v_col1, v_col2;
            EXIT WHEN c_rows%NOTFOUND;
            dbms_output.put_line(v_col1 || ',' || v_col2);
        END LOOP;
        --4、关闭游标
        CLOSE c_rows;
    end TEST_CURSOR;

       从上例可以总结出,使用显示游标包括定义游标、打开游标、提取数据和关闭游标四个阶段。

      (1)定义游标

      在使用显示游标之前,必须首先在定义部分定义游标。定义游标用于指定游标所对应的SELECT语句,语法如下:     

        CURSOR cursor_name IS select_statement;

      cursor_name用于指定游标名称;select_statement用于指定游标所对应的SELECT语句。

      (2)打开游标

      当打开游标时,Oracle会执行游标所对应的SELECT语句,并将SELECT语句的结果暂时存放到结果集中。语法如下:    

        OPEN cursor_name;

      该游标名必须是在定义部分已经定义的游标。

      (3)提取数据

      在打开游标之后,SELECT语句的结果被临时存放到游标结果集中。为了处理结果集中的数据,需要使用FETCH语句提取游标数据。语法如下:

        FETCH cursor_name INTO v1, v2, ...;

      v1, v2用于接收游标数据的变量。

      (4)关闭游标

      在提取并处理了结果集的所有数据之后,就可以关闭游标并释放其结果集了,语法如下:  

        CLOSE cursor_name;

      

  • 相关阅读:
    【NET】File操作练习笔记
    【微信小程序】分包的使用和预下载
    【微信小程序】组件Component常用案例
    MVCC多版本并发控制
    数据存储引擎
    seata 分布式事务 -- seata-three工程完整代码
    seata 分布式事务 -- seata-two工程完整代码
    seata 分布式事务 -- seata-one 工程完整代码
    seata 分布式事务 -- 准备工作
    seata 分布式事务 -- TCC模式
  • 原文地址:https://www.cnblogs.com/shuaihua/p/2861420.html
Copyright © 2020-2023  润新知