4
 Andre Dwi / 10509020 MI-01 Cursor pada PL/SQL Cursor adalah suatu variable dalam blok PL/SQL yang tidak mengiji nkan seorang programer membuat query yang menghasilkan lebih dari satu baris untuk ditampung di dalam nya. Cursor ada 2 macam yaitu : a. Cursor Eksplisit : Cursor yang harus dideklarasikan terlebih dahulu sebelum digunakan, sedangkan b. Cursor Implisit : Cursor yang tidak perlu dideklarasikan dulu pada declare section. contoh cursor implisit diasosiasikan dengan perintah SELECT, INSERT, DELETE, dan UPDATE. Contoh Program : A. Cursor Eksplisit DECLARE CURSOR c_nama IS SELECT nama_petugas FROM pegawai ORDER BY nama_petugas ASC; v_nama PETUGAS.nama_petugas%TYPE; BEGIN FOR X IN c_nama LOOP DBMS_OUTPUT.PUT_LINE (c_nama%ROWCOUNT ||'Daftar Nama Petugas : ' || x.nama_petugas); END LOOP; END; B. Cursor Implisit DECLARE id VARCHAR2(10); vnama_petugas PETUGAS.nama_petugas%TYPE; BEGIN id := 'PG-010'; //assigment value SELECT nama_petugas INTO vnama_petugas FROM PETUGAS WHERE id_petugas = id; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Data ditemukan'); ELSE DBMS_OUTPUT.PUT_LINE ('Nama petugas dengan id : ' || id || 'adalah ' || vnama_petugas); END IF; END;

Cursor Pada PL

Embed Size (px)

Citation preview

Page 1: Cursor Pada PL

5/12/2018 Cursor Pada PL - slidepdf.com

http://slidepdf.com/reader/full/cursor-pada-pl 1/4

Andre Dwi / 10509020MI-01

Cursor pada PL/SQL

Cursor adalah suatu variable dalam blok PL/SQL yang tidak mengijinkanseorang programer membuat query yang menghasilkan lebih dari satubaris untuk ditampung di dalam nya. Cursor ada 2 macam yaitu :

a.  Cursor Eksplisit : Cursor yang harus dideklarasikan terlebihdahulu sebelum digunakan, sedangkanb.  Cursor Implisit : Cursor yang tidak perlu dideklarasikan dulupada declare section. contoh cursor implisit diasosiasikan denganperintah SELECT, INSERT, DELETE, dan UPDATE.

Contoh Program :

A. Cursor Eksplisit

DECLARE

CURSOR c_nama IS

SELECT nama_petugas FROM pegawai ORDER BY nama_petugas ASC;

v_nama PETUGAS.nama_petugas%TYPE;

BEGIN

FOR X IN c_nama

LOOP

DBMS_OUTPUT.PUT_LINE (c_nama%ROWCOUNT ||'Daftar Nama Petugas

: ' || x.nama_petugas);END LOOP;

END;

B.  Cursor Implisit

DECLARE

id VARCHAR2(10);

vnama_petugas PETUGAS.nama_petugas%TYPE;

BEGIN

id := 'PG-010'; //assigment valueSELECT nama_petugas INTO vnama_petugas FROM PETUGAS WHERE

id_petugas = id;

IF SQL%NOTFOUND THEN

DBMS_OUTPUT.PUT_LINE('Data ditemukan');

ELSE

DBMS_OUTPUT.PUT_LINE ('Nama petugas dengan id : ' || id || 'adalah ' ||

vnama_petugas);

END IF;

END;

Page 2: Cursor Pada PL

5/12/2018 Cursor Pada PL - slidepdf.com

http://slidepdf.com/reader/full/cursor-pada-pl 2/4

Andre Dwi / 10509020MI-01

Cursor  digunakan dalam script PL/SQL untuk menampilkan data yangtersimpan 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.

Berikut ini adalah template untuk implicit cursor :

select [daftar kolom]into [daftar variabel]from [daftar tabel]where [syarat]

contoh:

select first_name, last_name, salaryinto nama_depan, nama_belakang, gajifrom employeeswhere first_name = ‘Susan’;

Berikut ini adalah contoh script PL/SQL yang menggunakan implicit cursor:

declarenama_cari employees.first_name%type;nama_depan employees.first_name%type;alamat_email employees.email%type;telepon employees.phone_number%type;beginnama_cari := '&masukkan_nama';select first_name, email, phone_numberinto nama_depan, alamat_email, teleponfrom 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;/

 Jika script  di atas dieksekusi pada schema HR maka hasilnya adalahsebagai berikut:

sedangkan ini adalah template untuk explicit cursor:

declarecursor [nama_cursor_bebas] is

select [daftar_kolom]

Page 3: Cursor Pada PL

5/12/2018 Cursor Pada PL - slidepdf.com

http://slidepdf.com/reader/full/cursor-pada-pl 3/4

Andre Dwi / 10509020MI-01

from [daftar_tabel]where [syarat];

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

Explicit cursor harus melalui empat tahap yaitu declare, open, fetch danclose. Berikut ini adalah penjelasannya:

1. Pada tahap declare, cursor dideklarasikan pada blok PL/SQL. Cursor perlu dideklarasikan karena sifat cursor yang menyerupai variable

(dapat dipanggil dalam blok utama program) namun deklarasi untukcursor diletakkan setelah deklarasi variable lain, tepat sebelum awalprogram (begin)

2. Pada tahap open, cursor dibuka (query dalam cursor dieksekusi danhasilnya ditampung dalam memory )

3. Pada tahap fetch, satu baris data dalam cursor  diambil danditransfer ke variable penampung yang ada pada klausa into.Karena jumlah baris data kemungkinan lebih dari satu makabiasanya fetch diletakkan dalam looping yang akan berhenti begitusemua baris data dalam cursor  selesai di-fetch ke variablepenampung

4. Pada tahap close, cursor  ditutup dan hasil query  dalam cursor dihapus dari memory 

Berikut ini adalah contoh script PL/SQL yang menggunakan explicit cursor :

declarenama_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_numberfrom employeeswhere first_name = nama_cari;

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

Page 4: Cursor Pada PL

5/12/2018 Cursor Pada PL - slidepdf.com

http://slidepdf.com/reader/full/cursor-pada-pl 4/4

Andre Dwi / 10509020MI-01

end;/

dan jika script di atas dieksekusi maka hasilnya adalah sebagai berikut:

Semua contoh di atas dapat digunakan pada sample database (schemaHR) yang terdapat pada Oracle 10g dan Oracle 10g XE.