遊標的概念引入(隱式遊標日常常用,只是一個內部的機制而已)

遊標的類型有兩種:隱式和顯式。 PL/SQL會爲所有的SQL數據操作聲明一個隱式的遊標,包括只返回一條記錄的查詢操作

其實我們在pl/sql中每作一次查詢操作就用到了oracle的隱式的遊標。

 

此外,我們可以顯示地使用遊標來處理一條查詢結果的遊標:

DECLARE
  CURSOR
 c1 IS
    SELECT
 empno, ename, job
      FROM emp
     WHERE deptno = 20;

 

由多行查詢返回的行集合稱爲結果集(result set)。它的大小就是滿足我們查詢條件的行的個數。如下圖所示,顯式遊標"指向"當前行的記錄,這可以讓我們的程序每次處理一條記錄。

 

其實,遊標相當於一個指針,它指向一個結果集;它在多個字段記錄的保存和處理上佔有

很大的優勢。

 

多行查詢處理有些像文件處理。例如,一個COBOL程序打開一個文件,處理記錄,然後關閉文件。同樣,一個PL/SQL程序打開一個遊標,處理查詢出來的行,然後關閉遊標。就像文件指針能標記打開文件中的當前位置一樣,遊標能標記出結構集的當前位置。

我們可以使用OPEN,FETCH和CLOSE語句來控制遊標,OPEN用於打開遊標並使遊標指向結果集的第一行,FETCH會檢索當前行的信息並把遊標指移向下一行,當最後一行也被處理完後,CLOSE就會關閉遊標

 

遊標FOR循環

在大多需要使用顯式遊標的情況下,我們都可以用一個簡單的遊標FOR循環來代替OPENFETCHCLOSE語句。首先,遊標FOR循環會隱式地聲明一個代表當前行的循環索引(loop index)變量。下一步,它會打開遊標,反覆從結果集中取得數據並放到循環索引的各個域(field)中。當所有行都被處理過以後,它就會關閉遊標。下面的例子中,遊標FOR循環隱式地聲明瞭一個emp_rec記錄:

 

DECLARE
  CURSOR
 c1 IS
    SELECT
 ename, sal, hiredate, deptno
      FROM emp;
  ...
BEGIN
  FOR
 emp_rec IN c1 LOOP
    ...
    salary_total    := salary_total + emp_rec.sal;
  END LOOP;
END;

 

爲了使用每一個查詢到的行中的每一個字段,我們可以使用點標誌(dot notation),它的作用就像一個域選擇器。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章