一、遊標(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迴圈中的控制變數只能在迴圈內使用,不能夠在迴圈的外部使用迴圈控制變數。