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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM