天天看點

存儲過程使用遊标變量傳回結果集

1)登入SQLPLUS,使用者為SCOTT,利用該使用者提供的表EMP

C:\Users\Administrator>sqlplus scott/scott
           

2)編寫一個FUNCTION,傳回值為遊标變量

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;
           

3)編寫一個PLSQL塊,調用上面的FUNCTION得到傳回的遊标變量

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;
           

作者 陳字文(熱衷于PM\ORACLE\JAVA等,歡迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零

4)幾點說明:

①有三種語句可以控制遊标變量的使用,分别是OPEN FOR、FETCH還有CLOSE。其中OPEN用于打開遊标變量。FETCH用于将遊标變量中的資料存放到變量當中存儲。CLOSE用于在周遊完成之後,關閉遊标。 ②使用遊标的時候,可以将REF CURSOR指定為強類型或者弱類型(在定義的後面增加RETURN ROWTYPE的方式),如果指定為強類型,小心避免出現類型不比對的錯誤。 ③遊标變量可以在應用于資料庫伺服器之間進行傳遞,可以在資料庫内部進行傳遞。應用或者資料庫本身不具備單獨的變量存儲空間,其遊标變量其實就是一個指向記憶體的指針,實質上這些資料是共享的。 ④能夠将遊标的四個屬性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT應用到遊标變量中,用于判斷遊标變量的狀态。 ⑤可以使用FETCH一次擷取一條記錄,也可以使用FETCH BULK COLLECT INTO 一次擷取一條或者多條放到一個或者多個集合類型中。 ⑥不要忘記關閉遊标。

繼續閱讀