Anda di halaman 1dari 7

Cursor

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

dideklarasikan. Sebaliknya FALSE.


SQL
%NOTFOUND
SQL

Kebalikan dari %FOUND


Jumlah

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

mendapatkan status cursor. Setiap atribut dalam penggunaannya harus


didahului dengan nama cursor.
Keterangan
Atribut
nama_cursor%FOUND

TRUE

jika

cursor

menghasilkan
sebuah

baris

queri

dari
yang

dideklarasikan.
nama_cursor

Sebaliknya FALSE.
Kebalikan
dari

%NOTFOUND
nama_cursor

%FOUND
Jumlah baris

%ROWCOUNT

di-fetch atau diambil

nama_cursor%ISOPEN

dari active set.


TRUE jika cursor

yang

sedang terbuka dan


FALSE
sebaliknya.

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;

Cursor FOR LOOP


Ada sebuah cara untuk mengambil isi cursor secara otomatis, yaitu
dengan struktur pengulangan FOR LOOP.
Disebut otomatis karena
tidak perlu proses pembukaan cursor ( OPEN )
memanipulasi proses pengambilan cursor ( FETCH )
tidak perlu penutupan cursor ( CLOSE )

variabel indeks yang digunakan dalam struktur pengulangan FOR_LOOP


tidak perlu dideklarasikan terlebih dahulu
Contoh:
DECLARE
CURSOR
mahasiswa;

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

menampilkan employee_id, department_id, salary, dan rata-rata


salary per departemen maksimal 10 baris. Dan Tampilkan juga
berapa rows yg ditampilkan.
4. Implicit cursor adalah?
5. Buatlah sebuah cursor yang digunakan untuk mengUPDATE salary
karyawan menjadi 2 kali gaji awal dimana id karyawan tersebut
adalah 109. Kemudian tampilkan pesan Data Telah diUpdate ketika
data telah berhasil diUPDATE (gunakan PARAMETER!) dan tampilkan
pesan Karyawan tidak ditemukan ketika employee_id nya tidak
terdapat dalam database.

Anda mungkin juga menyukai