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;
/