為什麼要Oracle遊標:
先看這個:
- DECLARE
- v_empno emp.empno%type;
- v_ename emp.ename%type;
- BEGIN
- SELECT empno,ename
- into v_ename,v_empno
- FROM emp;
- dbms_output.put_line(v_empno||' '||v_ename);
- END;
這個SELECT語句可能返回多條記錄,所以這個指派陳述式可能是錯誤的。所以遊標可以發揮作用了。
什麼是遊標?
遊標(cursor)是Oracle系統在記憶體中開闢的一個工作區,在其中存放SELECT語句返回的查詢結果。
遊標的分類:
隱式遊標:PL/SQL隱式建立並自動管理這一遊標。隱式遊標也叫做SQL遊標。 對於SQL遊標,不能對其顯式地執行OPEN、CLOSE和FETCH語句,但是可以使用遊標屬性從最近執行的SQL語句中擷取資訊。
顯式遊標:由程式員顯式說明及控制,用於從表中取出多行資料,並將多行資料一行一行單獨處理。
隱式遊標:
- 由Oracle在內部聲明
- 由Oracle自行管理遊標
- 可以使用遊標屬性從最近執行的SQL語句中擷取資訊
- 用於處理DML語句以及返回單行的查詢
隱式遊標屬性:
隱式遊標舉例:
- VARIABLE rows_deleted VARCHAR2(30)
- DECLARE
- v_deptno NUMBER := 20;
- BEGIN
- DELETE FROM emp
- WHERE deptno = v_deptno;
- :rows_deleted := (SQL%ROWCOUNT ||' rows deleted.');
- END;
- /
返回所刪除行的數量
顯式遊標:由使用者顯式聲明,查詢返回多行記錄
- 使用遊標時,select語句查詢的結果可以是單條記錄,多條記錄,也可以是零條記錄。
- 遊標工作區中,存在著一個指標(POINTER),在初始狀態它指向查詢結果的首記錄。
- 要訪問查詢結果的所有記錄,可以通過FETCH語句,進行指標的移動來實現。
- 使用遊標進行操作,包括定義遊標、開啟遊標、提取資料以及關閉遊標幾步。
更多Oracle相關資訊見Oracle 專題頁面 http://www.bkjia.com/topicnews.aspx?tid=12