Aracılığıyla paylaş


REF CURSOR Örnekleri

REF CURSOR örnekleri, REF CURSOR'larını kullanmayı gösteren aşağıdaki üç Microsoft Visual Basic örneğinden oluşur.

Örnek Açıklama
OracleDataReader'da REF CURSOR Parametreleri Bu örnek, REF CURSOR parametresi döndüren bir PL/SQL saklı yordamı yürütür ve değeri bir OracleDataReader gibi okur.
OracleDataReader Kullanarak Birden Çok REF CURSOR'dan Veri Alma Bu örnek, iki REF CURSOR parametresi döndüren bir PL/SQL saklı yordamı yürütür ve OracleDataReader kullanarak değerleri okur.
Bir veya Daha Fazla REF CURSOR Kullanarak DataSet Doldurma Bu örnek, iki REF CURSOR parametresi döndüren bir PL/SQL saklı yordamını çalıştırır ve döndürülen satırlarla DataSet'yi doldurur.

Bu örnekleri kullanmak için Oracle tablolarını oluşturmanız ve bir PL/SQL paketi ve paket gövdesi oluşturmanız gerekebilir.

Oracle Tablolarını Oluşturma

Bu örneklerde Oracle Scott/Tiger şemasında tanımlanan tablolar kullanılır. Oracle Scott/Tiger şeması çoğu Oracle yüklemesine dahil edilir. Bu şema yoksa, bu örnekler tarafından kullanılan tabloları ve dizinleri oluşturmak için {OracleHome}\rdbms\admin\scott.sql IÇINDEKI SQL komutları dosyasını kullanabilirsiniz.

Oracle Paketi ve Paket Gövdesi Oluşturma

Bu örnekler, sunucunuzda aşağıdaki PL/SQL paketini ve paket gövdesini gerektirir. Oracle sunucusunda aşağıdaki Oracle paketini oluşturun.

CREATE OR REPLACE PACKAGE CURSPKG AS
    TYPE T_CURSOR IS REF CURSOR;
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
                               IO_CURSOR IN OUT T_CURSOR);
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
                                DEPTCURSOR OUT T_CURSOR);  
END CURSPKG;  
/

Oracle sunucusunda aşağıdaki Oracle paket gövdesini oluşturun.

CREATE OR REPLACE PACKAGE BODY CURSPKG AS  
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,  
                               IO_CURSOR IN OUT T_CURSOR)  
    IS
        V_CURSOR T_CURSOR;
    BEGIN
        IF N_EMPNO <> 0
        THEN  
             OPEN V_CURSOR FOR
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
                  FROM EMP, DEPT
                  WHERE EMP.DEPTNO = DEPT.DEPTNO
                  AND EMP.EMPNO = N_EMPNO;  
  
        ELSE
             OPEN V_CURSOR FOR
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
                  FROM EMP, DEPT
                  WHERE EMP.DEPTNO = DEPT.DEPTNO;  
  
        END IF;  
        IO_CURSOR := V_CURSOR;
    END OPEN_ONE_CURSOR;
  
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,  
                                DEPTCURSOR OUT T_CURSOR)  
    IS
        V_CURSOR1 T_CURSOR;
        V_CURSOR2 T_CURSOR;
    BEGIN
        OPEN V_CURSOR1 FOR SELECT * FROM EMP;  
        OPEN V_CURSOR2 FOR SELECT * FROM DEPT;  
        EMPCURSOR  := V_CURSOR1;
        DEPTCURSOR := V_CURSOR2;
    END OPEN_TWO_CURSORS;
END CURSPKG;  
/  

Ayrıca bakınız