当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;

  

posted @ 2013-01-15 16:21  arcmike  阅读(9439)  评论(3编辑  收藏  举报