Interaksi PL/SQL dengan Oracle

6.7. Menggunakan Cursor Expressions

Sebuah cursor expression menghasilkan nested cursor. Setiap baris data di dalam result set dapat berisi nilai-nilai seperti biasanya, ditambah dengan cursors yang dihasilkan oleh subqueries yang menimbulkan nilai-nilai lain di dalam baris data tersebut. Sehingga, query tunggal dapat menghasilkan kumpulan besar dari nilai-nilai yang terkait yang ditampilkan dari beberapa tabel. Kita dapat memproses result set dengan nested loops yang mengambil nilai (fetch) dari baris-baris data dari result set, kemudian beberapa nested cursors bersama dengan baris-baris data tersebut.

PL/SQL mendukung queries dengan ekspresi-ekspresi cursor sebagai bagian dari deklarasi-deklarasi cursor, eklarasi-deklarasi REF CURSOR dan variable-variable ref cursor. Kita juga dapat menggunakan ekspresi-ekspresi cursor di dalam query-query SQL dinamis. Berikut ini adalah sintaksnya:

CURSOR ( subquery )

Nested cursor secara implisit dibuka ketika baris data yang terkandung di-fetch dari cursor induk. Nested cursor ditutup hanya jika:

6.7.1. Batasan-batasan Cursor Expressions

6.7.2. Contoh Cursor Expressions

Dalam contoh ini, kita menemukan ID lokasi yang telah ditentukan, dan cursor dari mana kita dapat mengambil seluruh departemen dari lokasi tersebut. Bersamaan dengan kita mengambil setiap nama departemen, kita juga mendapatkan cursor lain yang mengijinkan kita untuk mengambil detil karyawan yang terkait dari table lainnya.

CREATE OR REPLACE procedure emp_report(p_locid number) is
  TYPE refcursor is ref cursor;
  -- Query hanya menghasilkan 2 kolom, namun kolom kedua adalah
  -- sebuah cursor yang mengijinkan kita melintasi kumpulan informasi yang berhubungan.
  CURSOR c1 is
    SELECT l.city, CURSOR(SELECT d.department_name, CURSOR(SELECT e.last_name
                          FROM employees e
                          WHERE e.department_id = d.department_id) as ename
             FROM departments d where l.location_id = d.location_id) dname
    FROM locations l
    WHERE l.location_id = p_locid;
  loccur refcursor;
  deptcur refcursor;
  empcur refcursor;
  V_city locations.city%type;
  V_dname departments.department_name%type;
  V_ename employees.last_name%type;
BEGIN
  OPEN c1;
  LOOP
    FETCH C1 INTO v_city, loccur;
    EXIT WHEN c1%notfound;
    -- Kita dapat mengakses kolom C1.city, lalu memproses hasil-hasil dari cursor bersarang.
    LOOP
      FETCH loccur INTO v_dname, deptcur; -- No need to open
      EXIT WHEN loccur%notfound;
      LOOP
        FETCH deptcur into v_ename; -- tidak perlu dibuka
        EXIT WHEN deptcur%notfound;
        DBMS_OUTPUT.PUT_LINE(v_city ||' '||v_dname||' '||v_ename);
      END LOOP;
    END LOOP;
  END LOOP;
  close c1;
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