Anda di halaman 1dari 4

Andre Dwi / 10509020 MI-01

Cursor pada PL/SQL


Cursor adalah suatu variable dalam blok PL/SQL yang tidak mengijinkan seorang programer membuat query yang menghasilkan lebih dari satu baris untuk ditampung di dalam nya. Cursor ada 2 macam yaitu : a. Cursor Eksplisit : Cursor yang harus dideklarasikan terlebih dahulu sebelum digunakan, sedangkan b. Cursor Implisit : Cursor yang tidak perlu dideklarasikan dulu pada declare section. contoh cursor implisit diasosiasikan dengan perintah SELECT, INSERT, DELETE, dan UPDATE.
Contoh Program :

A.

Cursor Eksplisit
DECLARE

CURSOR c_nama IS SELECT nama_petugas FROM pegawai ORDER BY nama_petugas ASC; v_nama PETUGAS.nama_petugas%TYPE;
BEGIN FOR X IN c_nama

LOOP DBMS_OUTPUT.PUT_LINE (c_nama%ROWCOUNT ||'Daftar Nama Petugas : ' || x.nama_petugas); END LOOP; END; B. Cursor Implisit DECLARE id VARCHAR2(10); vnama_petugas PETUGAS.nama_petugas%TYPE; BEGIN id := 'PG-010'; //assigment value SELECT nama_petugas INTO vnama_petugas FROM PETUGAS WHERE id_petugas = id; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Data ditemukan'); ELSE DBMS_OUTPUT.PUT_LINE ('Nama petugas dengan id : ' || id || 'adalah ' || vnama_petugas); END IF; END;

Andre Dwi / 10509020 MI-01

Cursor digunakan dalam script PL/SQL untuk menampilkan data yang tersimpan di dalam database. Ada dua macam cursor yaitu implicit cursor (kursor implisit) dan explicit cursor (kursor eksplisit). Implicit cursor adalah cursor yang tidak perlu dideklarasikan pada bagian declaration, sedangkan explicit cursor harus dideklarasikan di bagian declaration. Berikut ini adalah template untuk implicit cursor:
select [daftar kolom] into [daftar variabel] from [daftar tabel] where [syarat]

contoh:
select first_name, last_name, salary into nama_depan, nama_belakang, gaji from employees where first_name = Susan;

Berikut ini adalah contoh script PL/SQL yang menggunakan implicit cursor:
declare nama_cari employees.first_name%type; nama_depan employees.first_name%type; alamat_email employees.email%type; telepon employees.phone_number%type; begin nama_cari := '&masukkan_nama'; select first_name, email, phone_number into nama_depan, alamat_email, telepon from employees where first_name = nama_cari; dbms_output.put_line('Nama: '||nama_depan); dbms_output.put_line('Email:'||alamat_email||'@SemogaJaya.co.id'); dbms_output.put_line('Telepon: '||telepon); end; /

Jika script di atas dieksekusi pada schema HR maka hasilnya adalah sebagai berikut:

sedangkan ini adalah template untuk explicit cursor:


declare cursor [nama_cursor_bebas] is select [daftar_kolom]

Andre Dwi / 10509020 MI-01


from [daftar_tabel] where [syarat]; begin open [nama_cursor_bebas]; loop fetch [nama_cursor_bebas] into [daftar_variabel]; exit when [nama_cursor_bebas] %notfound; [aksi_lain] end loop; close [nama_cursor_bebas]; end; /

Explicit cursor harus melalui empat tahap yaitu declare, open, fetch dan close. Berikut ini adalah penjelasannya:
1. Pada tahap declare, cursor dideklarasikan pada blok PL/SQL. Cursor

perlu dideklarasikan karena sifat cursor yang menyerupai variable (dapat dipanggil dalam blok utama program) namun deklarasi untuk cursor diletakkan setelah deklarasi variable lain, tepat sebelum awal program (begin)
2. Pada tahap open, cursor dibuka (query dalam cursor dieksekusi dan

hasilnya ditampung dalam memory)


3. Pada tahap fetch, satu baris data dalam cursor diambil dan

ditransfer ke variable penampung yang ada pada klausa into. Karena jumlah baris data kemungkinan lebih dari satu maka biasanya fetch diletakkan dalam looping yang akan berhenti begitu semua baris data dalam cursor selesai di-fetch ke variable penampung
4. Pada tahap close, cursor ditutup dan hasil query dalam cursor

dihapus dari memory Berikut ini adalah contoh script PL/SQL yang menggunakan explicit cursor:
declare nama_cari employees.first_name%type; nama_depan employees.first_name%type; alamat_email employees.email%type; telepon employees.phone_number%type; cursor anu is select first_name, email, phone_number from employees where first_name = nama_cari; begin nama_cari := '&masukkan_nama'; open anu; loop fetch anu into nama_depan, alamat_email, telepon; exit when anu%notfound; dbms_output.put_line('Nama: '||nama_depan); dbms_output.put_line('Email: '||alamat_email||'@SemogaJaya.co.id'); dbms_output.put_line('Telepon: '||telepon); dbms_output.put_line(-----------------------------------------------------------); end loop; close anu;

Andre Dwi / 10509020 MI-01


end; /

dan jika script di atas dieksekusi maka hasilnya adalah sebagai berikut:

Semua contoh di atas dapat digunakan pada sample database (schema HR) yang terdapat pada Oracle 10g dan Oracle 10g XE.