ORACLE遊標與迴圈

來源:互聯網
上載者:User

一、遊標(cursor)——遊標是系統為使用者開設的一個資料緩衝區,存放SQL語句的執行結果。每個遊標區都有一個名字,使用者可以用SQL語句逐一從遊標中擷取記錄,並賦給主變數,交由主語言進一步處理。


1、隱式遊標:oracle伺服器自動建立的遊標,在PL/SQL程式中所有發出的DML和SELECT語句中,oracle會自動聲明隱式遊標。

 

2、顯式遊標:自訂的遊標,為了處理由select語句返回的一組記錄,需要在PL/SQL程式中聲明和處理顯式遊標。

 

2.1、使用顯式遊標處理資料需要4個步驟:

1)聲明遊標:CURSOR cursor_name[parameter][return] is select_statement

2)開啟遊標:open cursor_name[value]

3)檢索資料:fetch cursor_name into {vatiable_list | record_variable}

4)關閉遊標:close cursor_name

 

3、迴圈

3.1、FOR..LOOP迴圈結構

Declare  

CURSOR merchandise_cursor IS

SELECT  *  FROM 表 WHERE 條件

BEGIN

FOR r IN merchandise_cursor LOOP

Dbms_output.put(r.column||’’);

Dbms_output.put_line(r.column);

END LOOP;

END;


3.2、LOOP迴圈結構——無條件迴圈

LOOP

--STATEMENTS--

EXIT WHEN CONDITION

END LOOP;

注意:如果沒有指定的EXIT語句,迴圈將一直運行;為了讓迴圈能正常運行,必須為EXIT WHEN 子句提供一個在某時某刻可以判斷為TRUE的條件。

例如

DECLARE

i number:=1;

BEGIN

LOOP

dbms_output.put_line(i || ' 的平方數為' || i*i);

i:=i+1;

EXIT WHEN i>10;

END LOOP;

END;


3.3、WHILE-LOOP迴圈結構

WHILE condition

LOOP

Statements;

END LOOP;


注意:

(1)使用遊標FOR迴圈時,不能使用OPEN語句、FETCH語句和CLOSE語句,否則會產生錯誤。

(2)當使用隱式遊標的屬性時,需要在屬性前加上SQL,因為Oracle在建立隱式遊標時預設的遊標名為SQL。

(3)使用遊標時,在指定資料類型時,不能使用長度約束,如NUMBER(4)、VARCHAR(10)等都是錯誤的。

(4)FOR迴圈中的控制變數只能在迴圈內使用,不能夠在迴圈的外部使用迴圈控制變數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.