Kamis, 04 November 2010

CURSOR IMPLISIT DAN EKSPLISIT

CURSOR

Cursor merupakan suatu variabel yang digunakan untuk menampung hasil query yang terdiri atas lebih dari satu row atau record. Cursor dapat diilustrasikan sebagai penampung sekaligus pointer atas hasil eksekusi query.

Cursor dibagi menjadi dua macam, yaitu :

· Cursor Implisit

· Cursor Eksplisit

1. Cursor Implisit

Cursor Implisit merupakan cursor yang tidak memerlukan deklarasi terlebih dahulu (tidak bernama). Cursor ini harus menghasilkan satu baris record.

Cursor implisit merupakan cursor yang tidak perlu dideklarasikan sebelumnya. Cursor ini berasosiasi dengan perintah SELECT, INSERT, DELETE, dan UPDATE.

Contoh cursor Implisit :

select first_name, last_name, department_name

from employees e join departments d

on e.department_id=d.department_id

where d.department_id=50;

2. Cursor Eksplisit

Statement declare

àMerupakan deklarasi nama cursor dan definisi struktur query yang akan dilakukan di dalamnya.

CURSOR nama_cursor IS query

Contoh:

DECLARE

CURSOR CUR1 IS SELECT nim, nama, alamat FROM mahasiswa

Statement open

à Sebelum suatu cursor dapat digunakan, cursor harus dibuka terlebih dahulu.

OPEN nama_cursor;

Contoh:

OPEN CUR1;

Statement fetch

à Fetch merupakan perintah untuk mengambil isi cursor, dimana isi dari cursor tersebut adalah hasil query yang telah dideklarasikan pada statement deklarasi cursor.

FETCH nama_cursor INTO ;

Contoh:

FETCH CUR1 INTO v_nim, v_nama, v_alamat;

Statement close

à Setelah pemrosesan query selesai, cursor harus ditutup dengan statemen CLOSE .

CLOSE nama_cursor;

Contoh:

Close CUR1;

Contoh Cursor Eksplisit :

Tampilkan first name , last name dari tabel employees dan nama department yang id department diinputkan oleh user.

jawab :

declare

rata number;

total number;

jum number;

cursor cursor1 is

select first_name, last_name, salary, department_name

from employees e join departments d

on e.department_id=d.department_id

where d.department_id=&input_kode_department;

vrec cursor1%rowtype;

begin

open cursor1;

dbms_output.put_line('=======================================================');

dbms_output.put_line('NO NAME DEPARTMENT NAME SALARY');

dbms_output.put_line('=======================================================');

total:=0;

loop

fetch cursor1 into vrec;

exit when cursor1%notfound;

dbms_output.put_line(rpad(cursor1%rowcount,5,' ')||

rpad(vrec.first_name||' '||vrec.last_name,19,' ')||

rpad(vrec.department_name,25,' ')||

lpad(vrec.salary,6,' '));

total:=total+vrec.salary;

end loop;

rata:=total/cursor1%rowcount;

jum:=cursor1%rowcount;

dbms_output.put_line('=======================================================');

dbms_output.put_line('Jumlah record : '||jum);

dbms_output.put_line('Total salary : '||total);

dbms_output.put_line('Rata - rata salary : '||rata);

close cursor1;

end;

/

ce.JPG