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;

 

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 dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] 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 […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word