Contoh REF CURSOR
Contoh REF CURSOR terdiri dari tiga contoh Microsoft Visual Basic berikut yang menunjukkan penggunaan REF CURSOR.
Sampel | Deskripsi |
---|---|
Parameter REF CURSOR di OracleDataReader | Contoh ini mengeksekusi prosedur tersimpan PL/SQL yang mengembalikan parameter REF CURSOR, dan membaca nilainya sebagai OracleDataReader. |
Mengambil Data dari Beberapa REF CURSOR Menggunakan OracleDataReader | Contoh ini mengeksekusi prosedur tersimpan PL/SQL yang mengembalikan dua parameter REF CURSOR, dan membaca nilai menggunakan OracleDataReader. |
Mengisi DataSet Menggunakan Satu atau Beberapa REF CURSOR | Contoh ini menjalankan prosedur tersimpan PL/SQL yang mengembalikan dua parameter REF CURSOR, dan mengisi DataSet dengan baris yang dikembalikan. |
Untuk menggunakan contoh ini, Anda mungkin perlu membuat tabel Oracle, dan Anda harus membuat paket PL/SQL dan isi paket.
Membuat Tabel Oracle
Contoh-contoh ini menggunakan tabel yang didefinisikan dalam skema Oracle Scott/Tiger. Skema Oracle Scott/Tiger disertakan dengan sebagian besar penginstalan Oracle. Jika skema ini tidak ada, Anda dapat menggunakan file perintah SQL di {OracleHome}\rdbms\admin\scott.sql untuk membuat tabel dan indeks yang digunakan oleh contoh ini.
Membuat Paket Oracle dan Isi Paket
Contoh-contoh ini memerlukan paket PL/SQL berikut dan isi paket di server Anda. Buat paket Oracle berikut di server Oracle.
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;
/
Buat isi paket Oracle berikut di server Oracle.
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;
/