存儲過程使用遊標變量返回結果集(推薦)

轉載自:http://www.2cto.com/database/201301/186608.html
存儲過程使用遊標變量返回結果集
 
1)登錄SQLPLUS,用戶爲SCOTT,利用該用戶提供的表EMP
  www.2cto.com  
[sql] 
C:\Users\Administrator>sqlplus scott/scott  
 
2)編寫一個FUNCTION,返回值爲遊標變量
 
[sql] 
CREATE OR REPLACE FUNCTION GETEMPCURSOR(PRM_CHOICE IN NUMBER)  
RETURN  SYS_REFCURSOR  
IS  
  EMPCURSOR SYS_REFCURSOR;  
BEGIN  
  IF PRM_CHOICE = 1 THEN  
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 10;  
  ELSIF   PRM_CHOICE =2 THEN  
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 20;  
  ELSIF  PRM_CHOICE =3 THEN  
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 30;  
  ELSE  
    OPEN EMPCURSOR FOR SELECT * FROM EMP;  
  END IF;  
  RETURN EMPCURSOR;  
END;  
  www.2cto.com  
3)編寫一個PLSQL塊,調用上面的FUNCTION得到返回的遊標變量
 
[sql] 
DECLARE  
  EMPCURSOR SYS_REFCURSOR;  
  REC_EMP EMP%ROWTYPE;  
BEGIN  
  EMPCURSOR := GETEMPCURSOR(10);  
  IF EMPCURSOR%ISOPEN THEN  
    LOOP  
        FETCH EMPCURSOR INTO REC_EMP;  
        EXIT WHEN EMPCURSOR%NOTFOUND;  
        DBMS_OUTPUT.PUT_LINE(''||'==>'||REC_EMP.ENAME);  
    END LOOP;  
  END IF;  
  CLOSE EMPCURSOR;  
END;  
  www.2cto.com  
4)幾點說明:
 
①有三種語句可以控制遊標變量的使用,分別是OPEN FOR、FETCH還有CLOSE。其中OPEN用於打開遊標變量。FETCH用於將遊標變量中的數據存放到變量當中存儲。CLOSE用於在遍歷完成之後,關閉遊標。
②使用遊標的時候,可以將REF CURSOR指定爲強類型或者弱類型(在定義的後面增加RETURN ROWTYPE的方式),如果指定爲強類型,小心避免出現類型不匹配的錯誤。
③遊標變量可以在應用於數據庫服務器之間進行傳遞,可以在數據庫內部進行傳遞。應用或者數據庫本身不具備單獨的變量存儲空間,其遊標變量其實就是一個指向內存的指針,實質上這些數據是共享的。
④能夠將遊標的四個屬性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT應用到遊標變量中,用於判斷遊標變量的狀態。
⑤可以使用FETCH一次獲取一條記錄,也可以使用FETCH BULK COLLECT INTO 一次獲取一條或者多條放到一個或者多個集合類型中。
⑥不要忘記關閉遊標。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章