Interaksi PL/SQL dengan Oracle

6.2.1.5. Melakukan Fetch Data Besar dengan Cursor

Klausa BULK COLLECT mengijinkan kita untuk melakukan bulk-bind seluruk kolom-kolom data Oracle. Dengan demikian, kita dapat melakukan fetch terhadap seluruh baris data dari result set sekali. Dalam contoh berikut ini, kita melakukan bulk-fetch dari cursor ke dalam dua collections:

DECLARE
  TYPE NumTab IS TABLE OF emp.empno%TYPE;
  TYPE NameTab IS TABLE OF emp.ename%TYPE;
  nums NumTab;
  names NameTab;
  CURSOR c1 IS
    SELECT empno, ename
    FROM emp
    WHERE job = 'CLERK';
BEGIN
  OPEN c1;
  FETCH c1 BULK COLLECT INTO nums, names;
  ...
  CLOSE c1;
END;

6.2.1.6. Menutup Cursor

Perintah CLOSE men-disable cursor, dan result set menjadi tidak terdefinisi. Sekali cursor ditutup, kita dapat membukanya kembali. Suatu operasi yang dilakukan terhadap cursor yang telah tertutup menyebabkan munculnya predefined exception INVALID_CURSOR.

6.2.1.7. Menggunakan Subqueries dalam Cursor

Sebuah subquery merupakan query (biasanya ditutup dengan tanda kurung) yang muncul bersama dengan perintah manipulasi data SQL lainnya. Ketika dievaluasi, subquery menyediakan nilai atau kumpulan nilai kepada perintah tersebut. Seringkali, subqueries digunakan di dalam klausa WHERE. Sebagai contoh, query berikut ini menghasilkan karyawan-karyawan yang tidak berlokasi di Chicago:

DECLARE
  CURSOR c1 IS
    SELECT empno, ename
    FROM emp
    WHERE deptno IN (SELECT deptno
                     FROM dept
                     WHERE loc <> 'CHICAGO');

Menggunakan subquery di dalam klausa FROM, query berikut ini menghasilkan nomor dan nama setiap departemen dengan lima atau lebih karyawan:

DECLARE
  CURSOR c1 IS
    SELECT t1.deptno, dname, "STAFF"
    FROM dept t1, (SELECT deptno, COUNT(*) "STAFF"
                   FROM emp
                   GROUP BY deptno) t2
    WHERE t1.deptno = t2.deptno AND "STAFF" >= 5;

Mengingat subquery dievaluasi hanya sekali untuk setiap table, subquery yang berhubungan dievaluasi sekali untuk setiap baris data. Mari kita perhatikan query berikut ini, yang mana menghasilkan nama dan gaji setiap karyawan yang memiliki gaji melampaui rata-rata gaji untuk baris departemen. Baris data dihasilkan jika gaji melampaui rata-rata.

DECLARE
  CURSOR c1 IS
    SELECT deptno, ename, sal
    FROM emp t
    WHERE sal > (SELECT AVG(sal) FROM emp WHERE t.deptno = deptno)
    ORDER BY deptno;

6.2.2. Pengenalan Implicit Cursors

Oracle secara implisit membuka cursor untuk memproses setiap perintah SQL yang tidak terhubung dengan cursor yang terdeklarasi secara eksplisit. Kita dapat mereferensi kepada cursor implisit terbaru sebagai cursor SQL. Meskipunkita tidak dapat menggunakan perintah-perintah OPEN, FETCH, dan CLOSE untuk mengontrol cursor SQL, kita dapat menggunakan atribut-atribut cursor untuk mendapatkan informasi tentang perintah SQL yang baru saja dieksekusi.

 

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19


Bookmark and Share

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma, Uranus dsb.

 

Find Related articles