Jumat, 05 November 2010

CURSOR IMPLISIT DAN EKSPLISIT

Blok PL/SQL tidak mengijinkan menampilkan beberapa baris dengan menggunakan perintah SELECT secara langsung. Untuk mengatasinya digunakanlah cursor. Cursor merupakan sejenis variabel yang dapat digunakan untuk menampung banyak nilai berupa baris atau record.

Dapat dikatakan pula cursor adalah pointer yang menunjuk ke suatu bagian memori untuk menyimpan hasil instruksi SQL. Hasil instruksi SQL tersebut biasanya merupakan multiple row, dan cursor digunakan untuk menunjuk (pointer) ke salah satu baris data.

Dalam penggunaannya, cursor harus melalui empat tahap : deklarasi (DECLARE), buka (OPEN), pengambilan data (FETCH), dan tutup (CLOSE). Cursor sendiri dibedakan menjadi : cursor implisit dan cursor eksplisit.

1. Cursor Implisit with Exception

Merupakan perintah SELECT statement dengan klausa INTO yang terdapat di dalam blok PL/SQL dan harus menghasilkan satu baris record. Jika hasil cursor implisit ini lebih dari satu baris atau tidak menghasilkan satu baris pun, maka Oracle akan mengeluarkan pesan kesalahan. Klausa into pada cursor implisit dipakai untuk menugaskan nilai hasil proses select ke dalam variabel-variabel yang dipilih.

Contoh:

declare
nama_cari employees.first_name%type;
nama_depan employees.first_name%type;
jabatan jobs.job_title%type;
gaji employees.salary%type;

begin
nama_cari:='&masukkan_nama';

select first_name,salary,job_title
into nama_depan,gaji,jabatan
from employees natural join jobs
where first_name=nama_cari;

dbms_output.put_line('Pegawai bernama '||nama_depan);
dbms_output.put_line('Bekerja di : '||jabatan);
dbms_output.put_line('Gaji : '||gaji);

If (gaji>5000) then
dbms_output.put_line(nama_depan||' gajinya besar');

else
dbms_output.put_line(nama_depan||' gajinya kecil');
end if;

EXCEPTION
when no_data_found then
     dbms_output.put_line('Maaf data tidak ditemukan');
when too_many_rows then
     dbms_output.put_line('Maaf data lebih dari 1');

end;
/


Output:


2. Cursor Eksplisit

Tidak seperti cursor implisit, cursor eksplisit harus dideklarasikan terlebih dahulu sebelum digunakan. Terdapat empat tahapan penggunaan cursor eksplisit ini yaitu: declare, open, fetch dan terakhir adalah close.

Contoh:
declare
id_dep departments.department_id%type;
nama_dep departments.department_name%type;
gaji employees.salary%type;

cursor opo is

select b.department_id,b.department_name,avg(a.salary)
from employees a, departments b
where a.department_id=b.department_id
group by (b.department_id,b.department_name);

begin

dbms_output.put_line(rpad('ID_DEPT',10,' ')||rpad('DEPARTEMEN',25,' ')||lpad('RATA2 GAJI',10,' '));

open opo;
loop
fetch opo into id_dep,nama_dep,gaji;
     exit when opo%notfound;

dbms_output.put_line(rpad(id_dep,10,' ')||rpad(nama_dep,25,' ')||lpad(gaji,10,' '));
end loop;

close opo;
  
end;
/    


Output:



2 komentar:

  1. tulisannya lengkap dwie, ada ilustrasi, bagus, lain kali diberi referensi juga ya, terima kasih

    BalasHapus
  2. Play Blackjack online at William Hill NJ - WGRione
    Blackjack game for online is the game of strategy and luck. Try Blackjack online at William Hill septcasino NJ! Find 1xbet out everything you need to know about playing in the 바카라 casino

    BalasHapus