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
| 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. |


































