Belajar Menulis dan Membaca Part 4 [Cursor Eksplisit dan Implisit]

Diposting oleh about my life ^_^

CURSOR

Cursor merupakan sejenis variabel yang dapat digunakan untuk menampung banyak nilai berupa baris atau record. dapat dikatakan pula kursor adalah pointer yang menunjuk ke suatu bagian memori untuk menyimpan hasil intruksi SQL. hasil intruksi tersebut biasanya merupakan multiple row, dan kursor digunakan untuk menunjuk pointer ke salah satu baris. Kursor terdiri dari 2 macam, yaitu kursor implisit dan eksplisit. 

1. Cursor Implisit 
    cursor implisit merupakan cursor yang tidak perlu di deklarasikan sebelumnya. cursor ini berasosiasi dengan perintah SELECT, INSERT, DELETE, dan UPDATE.

contoh koding yang menggunakan cursor implisit
    contoh 1:

    declare
    nama_cari varchar(15);
    nama_depan varchar(15);
    nama_belakang varchar(15);
    gaji varchar(10);
    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;
    /

 contoh 2:
    declare 
    nama_cari employees.first_name%typenama_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;
    /

2. Cursor Eksplisit
    Cursor eksplisit merupakan cursor yang harus dibuka dan ditutup secara manual. 
       
DOFC  (DECLARE, OPEN, FETCH, CLOSE)
Declare
cursor [nama_cursor_bebas] is
select [daftar_kolom]
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;
/

contoh kodingan cursor eksplisit
contoh 1:
     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;
/

 contoh 2:   
         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;
end;
/

 
Menambahkan Exception Handling
         setiap kesalahan (error) atau peringatan (warning) yang muncul karena suatu perintah disebut sebagai exception. blok exception dapat ditempatkan dalam blok sebagai exception handling
 

contoh peletakan exception:
    declare
    a employees.first_name%type;
    b employees.first_name%type;
    c employees.first_name%type; 
    begin
    c:='&nama_cari';
    select first_name, salary
    into a, b
    from employees
    where first_name = c;
    dbms_output.put_line('Gajinya '||a||' adalah USD '||B);
    exception
    when no_data_found then
      dbms_output.put_line('Maaf nama '||c||' tidak ditemukan');
    when too_many_rows then
      dbms_output.put_line('Maaf nama '||c||' lebih dari 1
      orang');

    end; 
    /

 

 

1 komentar:

wahyu85 mengatakan...

tulisannya sudah cukup lengkap dan bagus dengan warna2 jadi lebih mudah dipahami tapi di bagian contoh agak susah terbaca (tulisannya kecil sekali, kaca mata saya hilang :D ...)

akan lebih bagus lagi kalo dilengkapi dengan ilustrasi dan disebutkan referensi/sumbernya.

terima kasih.

Posting Komentar