Cursor adalah nama untuk sebuah area SQL dimana informasi untuk
pemrosesan pernyataan SQL yang sifatnya spesifik disimpan. Dalam hal
ini PL/SQL menggunakan cursor implisit maupun cursor explisit.
Atribut cursor mengembalikan informasi yang bermanfaat tentang status
cursor dalam pengeksekusian pernyataan PL/SQL.
Cursor digunakan dalam script PL/SQL untuk menampilkan data yang
tersimpan di dalam database.
Ada dua macam cursor yaitu implicit cursor (kursor implisit) dan explicit
cursor (kursor eksplisit).
Implicit cursor adalah cursor yang tidak perlu dideklarasikan pada bagian
declaration, sedangkan explicit cursor harus dideklarasikan di bagian
declaration.
Cursor Implisit
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.
Atribut
Keterangan
TRUE jika cursor menghasilkan
SQL%FOUND
sebuah
baris
dari
queri
yang
baris
yang
telah
%ROWCOUNT
diambil/ditangkap (FETCH)
Mengembalikan nilai TRUE jika
SQL%ISOPEN
cursor
masih
terbuka (OPEN)
dalam
keadaan
Contoh:
declare
mhs_rec mahasiswa%rowtype;
nim_nya mahasiswa.nim%type;
begin
nim_nya := '30108001';
select nim, nama, alamat into mhs_rec
from nahasiswa
where nim = nim_nya;
...
end;
Jika nilai nim sama dengan 30108001 dipenuhi maka hasil proses select
menghasilkan satu baris, sedangkan jika nilai nim_nya diganti dengan nilai
lain dimana nilai tersebut tidak akan menghasilkan satu baris pun, maka
Oracle akan mengeluarkan pesan kesalahan. Demikian pula jika klausa
where pada cursor di atas dihilangkan sementara di dalam tabel proyek
terdapat lebih dari satu baris, maka cursor tersebut tidak dapat
menampung semua baris yang diterima. Hal ini akan menimbulkan error
exact fetch returns more than requested number of rows.
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.
Statement declare:
CURSOR nama_cursor IS query
Merupakan deklarasi nama cursor dan definisi struktur query yang akan
dilakukan di dalamnya.
Contoh:
DECLARE
CURSOR CUR1 IS
SELECT nim, nama, alamat
FROM mahasiswa
.. .. ..
Statement open
OPEN nama_cursor;
Sebelum suatu cursor dapat digunakan, cursor harus dibuka terlebih
dahulu.
Contoh:
OPEN CUR1;
Statement fetch
FETCH nama_cursor INTO <variable1,variable2,..>;
Fetch merupakan perintah untuk mengambil isi cursor, dimana isi dari
cursor tersebut adalah hasil query yang telah dideklarasikan pada
statement deklarasi cursor. Dan tiap-tiap field hasil query tersebut
kemudian ditampung dalam variable-variable yang tipe datanya sesuai
dengan tipe-tipe kolom query pada statemen deklarasi. Fetch ini dilakukan
untuk tiap-tiap baris.
Contoh:
FETCH CUR1 INTO v_nim, v_nama, v_alamat;
Statement close
CLOSE nama_cursor;
Setelah
pemrosesan
satatemen
CLOSE
query
ini.
selesai,
Berikut
ini
cursor
harus
adalah
ditutup
atribut-atribut
dengan
untuk
TRUE
jika
cursor
menghasilkan
sebuah
baris
queri
dari
yang
dideklarasikan.
nama_cursor
Sebaliknya FALSE.
Kebalikan
dari
%NOTFOUND
nama_cursor
%FOUND
Jumlah baris
%ROWCOUNT
nama_cursor%ISOPEN
yang
jika
Contoh:
DECLARE
v_nama varchar2(20);
v_nim char(9);
CURSOR CUR1 IS SELECT NAMA, NIM
FROM MAHASISWA;
BEGIN
OPEN CUR1;
FETCH CUR1 INTO v_nama, v_nim;
WHILE CUR1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(v_nama);
DBMS_OUTPUT.PUT_LINE(v_nim);
FETCH CUR1 INTO v_nama, v_nim;
END LOOP;
CLOSE CUR1;
END;
cur1
IS
select
nama
from
BEGIN
FOR rec IN cur1 LOOP
dbms_output.put_line(rec.nama);
END LOOP
END;
Soal
1. Apa fungsi dari Atribut cursor?
2. Apa pengertian atau definisi dari cursor?
3. Buatlah statement PL/SQL dengan menggunakan
cursor
utk