Minggu, 14 November 2010

Cursor Implisit dan Eksplisit


Cursor
Cursor adalah suatu variable dalam blok PL/SQL 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 ada 2 macam yaitu :
-  Cursor Implisit
-  Cursor Eksplisit

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 :
select first_name, last_name, salary
into nama_depan, nama_belakang, gaji
from employees
where first_name = ‘Susan’;

contoh scriptnya adalah :

declare
nama_cari employees.first_name%type;
nama_depan employees.first_name%type;
nama_belakang employees.last_name%type;
gaji employees.salary%type;
begin
nama_cari := '&masukkan_nama';
select first_name, last_name, salary
into nama_depan, nama_belakang, gaji
from employees
where first_name = nama_cari;
dbms_output.put_line('pegawai bernama '||nama_depan||
' '||nama_belakang||' gajinya adalah USD '||gaji);
end;
/

Tampilan yang akan keluar adalah sbb :










Cursor Eksplisit
cursor eksplisit harus dideklarasikan terlebih dahulu sebelum digunakan. Terdapat empat tahapan penggunaan cursor eksplisit ini yaitu: DECLARE, OPEN, FETCH dan terakhir adalah CLOSE.

contoh scriptnya adalah :

declare
nama_cari employees.first_name%type;
nama_depan employees.first_name%type;
nama_belakang employees.last_name%type;
gaji employees.salary%type;
cursor anu is
select first_name, last_name, salary
from employees
where first_name = nama_cari;
begin
nama_cari := '&masukkan_nama';
open anu;
loop
fetch anu into nama_depan, nama_belakang, gaji;
exit when anu%notfound;
dbms_output.put_line('pegawai bernama '||nama_depan||
' ' ||nama_belakang||' gajinya adalah USD '||gaji);
end loop;
close anu;
end;
/


Tampilan yang akan keluar adalah sbb :




Looping


Looping
Struktur iterasi (looping) memungkinkan eksekusi blok statemen secara berulang selama kondisi yang didefinisikan bernilai TRUE.
Looping terbagi atas 3 bagian yaitu :
·         Simple LOOP
·         FOR
·         WHILE
Untuk keluar dari kontrol iterasi menuju statemen-statemen di bawah blok iterasi (setelah posisi END LOOP) dapat menggunakan statemen EXIT atau EXIT WHEN.

Simple LOOP
Struktur simple LOOP digunakan bila diinginkan minimal iterasi dijalankan satu kali. Dalam struktur ini harus ditambahkan statemen EXIT WHEN untuk menghindari eksekusi tak terbatas (infinitif).
LOOP
Statemen-statemen ;
END LOOP ;

Contoh :
DECLARE
i NUMBER(3);
hasil NUMBER(5);
BEGIN
i:=1;
WHILE i <= 10 LOOP
   hasil := i**3;
   DBMS_OUTPUT.PUT_LINE(i ||' pangkat 3 = '|| hasil );
   i := i + 1;
END LOOP;
END;
/




Tampilan yang akan keluar adalah sbb :












Statemen FOR

Struktur FOR tidak memiliki kondisi, sehingga perlu didefinisikan indeks minimal dan maksimal sebagai batas iterasi. Umumnya struktur ini digunakan untuk iterasi yang banyaknya sudah diketahui dengan pasti.
FOR var IN [REVERSE] indeks_min . . indeks_max LOOP
            Statemen-statemen ;
END LOOP ;


o   Variabel iterasi (var) tidak perlu dideklarasi karena PL/SQL melakukan deklarasi secara implicit dan variable ini berlaku dalam LOOP itu saja.
o   Kata REVERSE akan membuat iterasi dimulai dari indeks_max dan berkurang satu untuk proses iterasi. Demikian seterusnya sehingga var = indeks_min.
o   Bila nilai indeks_max < indeks_min, proses iterasi tidak dilakukan.


Contoh :
Declare
i number(3);
BEGIN
FOR i IN 1..10 LOOP
   DBMS_OUTPUT.PUT_LINE('Ini angka ' || i );
END LOOP;
END;
/


Tampilan yang akan keluar adalah sbb :











Statemen WHILE

Struktur WHILE selalu memeriksa kebenaran kondisi di awal blok iterasi.
Bila kondisi bernilai FALSE, maka statemen-statemen dalam blog iterasi tidak akan dieksekusi.
WHILE kondisi LOOP
Statemen-statemen ;
END LOOP ;


 Contoh :
DECLARE
hasil NUMBER(5);

BEGIN
i:=1;
WHILE i <= 10 LOOP
   hasil := i**3;
   DBMS_OUTPUT.PUT_LINE(i ||' pangkat 3 = '|| hasil
);
   i := i + 1;
END LOOP;
END;
/

Tampilan yang akan keluar adalah sbb :






Statemen EXIT dan EXIT WHEN

Kedua statemen ini digunakan untuk keluar dari blog iterasi tanpa melanjutkan proses yang sedang dilakukan.
EXIT WHEN kondisi ;

Jika diatas identik dengan maka memakai perintah berikut :
IF kondisi THEN
            EXIT ;
END IF ;


contoh :
DECLARE
total NUMBER(9);
counter NUMBER(6);
BEGIN
total := 0;
counter := 10;
LOOP
   total := total + counter;
   EXIT WHEN total > 50;
   DBMS_OUTPUT.PUT_LINE(' Total: ' || total);
END LOOP;
DBMS_OUTPUT.PUT_LINE('Counter: ' || counter);
END;
/

Tampilan yang akan keluar adalah sbb :