Interaksi PL/SQL dengan Oracle
6.4.1. Menggunakan Subqueries Daripada Explicit Cursors
Kita tidak perlu mendeklarasikan sebuah cursor karena PL/SQL mengijinkan kita untuk menggantikannya dengan subquery. Cursor FOR loop berikut ini menghitung bonus, lalu menambahkan hasilnya ke dalam table di database.
DECLARE
bonus REAL;
BEGIN
FOR emp_rec IN (SELECT empno, sal, comm FROM emp) LOOP
bonus := (emp_rec.sal * 0.05) + (emp_rec.comm * 0.25);
INSERT INTO bonuses VALUES (emp_rec.empno, bonus);
END LOOP;
COMMIT;
END;
6.4.2. Menggunakan Cursor Subqueries
Kita dapat menggunakan cursor subqueries, juga dikenal dengan cursor expressions, untuk melewatkan kumpulan baris data sebagai parameter-parameter terhadap functions. Sebagai contoh, perintah ini melewatkan parameter ke function StockPivot yang terdiri dari REF CURSOR yang merepresentasikan baris-baris data yang dihasilkan oleh cursor subquery:
SELECT * FROM TABLE(StockPivot(CURSOR(SELECT * FROM StockTable)));
Cursor subqueries biasa digunakan dengan table functions.
6.4.3. Mendefinisikan Alias-alias untuk Nilai-nilai Ekspresi di dalam Cursor FOR Loop
Field-field di dalam record yang terdefinisi secara eksplisit memegang nilai-nilai kolom dari baris data terbaru yang dihasilkan. Field-field ini memiliki nama-nama yang sama sebagai kolom-kolom yang terhubung di dalam daftar SELECT. Namun, apa yang terjadi jika item dari SELECT merupakan ekspresi? Mari kita perhatikan contoh berikut ini:
CURSOR c1 IS SELECT empno, sal+NVL(comm,0), job FROM ...
Dalam kasus seperti ini, kita harus menyertakan alias untuk item pada SELECT tersebut. Dalam contoh berikut ini, wages merupakan alias untuk sal+NVL(comm,0):
CURSOR c1 IS SELECT empno, sal+NVL(comm,0) wages, job FROM ...
Untuk merefer ke field terkait, kita menggunakan alias daripada menggunakan nama kolom, seperti berikut ini:
IF emp_rec.wages < 1000 THEN ...
6.4.4. Melewatkan Parameter-parameter ke Cursor FOR Loop
Kita dapat melewatkan parameter-parameter ke cursor di dalam cursor FOR loop. Di dalam contoh berikut ini, kita melewatkan kode departemen. Kemudian, kita menghitung upah yang dibayarkan kepada pegawai-pegawai di dalam departemen tersebut. Kita juga menentukan berapa banyak pegawai yang memiliki gaji lebih besar daripada $2000 dan/atau komisi lebih besar daripada gaji mereka.
DECLARE
CURSOR emp_cursor(dnum NUMBER) IS
SELECT sal, comm FROM emp WHERE deptno = dnum;
total_wages NUMBER(11,2) := 0;
high_paid NUMBER(4) := 0;
higher_comm NUMBER(4) := 0;
BEGIN
/* Jumlah perulangan sama dengan jumlah baris data yang dihasilkan cursor emp. */
FOR emp_record IN emp_cursor(20) LOOP
emp_record.comm := NVL(emp_record.comm, 0);
total_wages := total_wages + emp_record.sal + emp_record.comm;
IF emp_record.sal > 2000.00 THEN
high_paid := high_paid + 1;
END IF;
IF emp_record.comm > emp_record.sal THEN
higher_comm := higher_comm + 1;
END IF;
END LOOP;
INSERT INTO temp
VALUES (high_paid, higher_comm,'Total Wages: ' || TO_CHAR(total_wages));
COMMIT;
END;
| 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 dsb. Harga Rp. 24.800,- (157 halaman) |


[…] Interaksi PL/SQL dengan Oracle - 6,172 viewsFungsi Baris Tunggal - 4,245 viewsData Modelling dan Database Design - 3,954 viewsMengubah Table dan Constraint - 3,213 viewsTipe-tipe Data PL/SQL - 3,145 viewsPL/SQL Subprograms - 2,742 viewsMengontrol Akses User - 2,717 viewsCollections dan Records PL/SQL - 2,654 viewsMenampilkan Data - 2,572 viewsPendahuluan - 2,555 views […]