cursor implisit dan exsplisit :
-------------------------------
pada blok PL/SQL untuk menampilkan query yang hasilnya lebih dari 1 record
tidak akan bisa tanpa membuat cursor,
karna cursor itu sendiri berfungsi sebagai penampung query yang
hasilnya lebih dari 1 record. Terdapat 2 cursor di PL/SQL,
yaitu Cursor Eksplisit dan Implisit.
Cursor Implisit :
Cursor implisit adalah perintah select statement
dengan ditambahkan klausa INTO yang terdapat di dalam
blok PL/SQL dan harus menghasilkan satu baris record.
Cursor Eksplisit :
Cursor eksplisit adalah suatu perintah select yang harus
di deklarasikan terlebih dahulu, biasanya dengan menggunakan
cursor eksplisit bisa menampilkan record lebih dari 1 dengan
melakukan looping pada blok PL/SQL,
perbedaannya :
- perbedaan ekplisit cursor dengan implisit cursor adalah,
kalau explisit cursor harus di declare terlebih dahulu, dan di bagian body PL/SQL dilakukan
perulangan data yang disimpan di dalam cursor tersebut.
contoh cursor explisit (soal slide 18):
========================================
DECLARE
empno employees.employee_id%type;
ename employees.last_name%type;
esalary employees.salary%type;
cursor emp_cursor is select employee_id,first_name||' '||last_name,salary from
employees ;
BEGIN
OPEN emp_cursor;
dbms_output.put_line('Employee_id==Name==salary');
LOOP
fetch emp_cursor into empno,ename,esalary;
exit when emp_cursor%rowcount>10 or emp_cursor%notfound;
dbms_output.put_line(empno||' '||ename||' '||esalary);
end loop;
close emp_cursor;
end;
/
=============================================================================
LATIHAN SOAL 1
==============================================
----menggunakan basic loop--------------------
DECLARE
kdsen wali.kode_dosen%type;
enim wali.nim%type;
cursor emp_cursor is select kode_dosen,nim from
wali ;
BEGIN
OPEN emp_cursor;
dbms_output.put_line('kode dosen==NIM');
LOOP
fetch emp_cursor into kdsen,enim;
exit when emp_cursor%notfound;
dbms_output.put_line(kdsen||' '||enim);
end loop;
close emp_cursor;
end;
/
==============================================================================
----menggunakan while loop--------------------
DECLARE
v_bil NUMBER:=0;
kdsen wali.kode_dosen%type;
enim wali.nim%type;
cursor emp_cursor is select kode_dosen,nim from
wali ;
BEGIN
OPEN emp_cursor;
dbms_output.put_line('kode dosen==NIM');
while v_bil<3LOOP
fetch emp_cursor into kdsen,enim;
exit when emp_cursor%notfound;
dbms_output.put_line(kdsen||' '||enim);
v_bil := v_bil + 1;
end loop;
close emp_cursor;
end;
/
===============================================================================
----menggunakan for loop--------------------
DECLARE
cursor emp_cursor is select kode_dosen,nim from
wali ;
BEGIN
dbms_output.put_line('kode dosen==NIM');
for data_wali in emp_cursor LOOP
exit when emp_cursor%notfound;
dbms_output.put_line(data_wali.kode_dosen||' '||data_wali.nim);
end loop;
end;
/
================================================================================
--------menggunakan basic loop & record-------------
DECLARE
type wali_record is record(
kdsen wali.kode_dosen%type,
enim wali.nim%type);
cursor emp_cursor is select kode_dosen,nim from
wali ;
wali_rec wali_record;
BEGIN
OPEN emp_cursor;
dbms_output.put_line('kode dosen==NIM');
LOOP
fetch emp_cursor into wali_rec.kdsen,wali_rec.enim;
exit when emp_cursor%notfound;
dbms_output.put_line(wali_rec.kdsen||' '||wali_rec.enim);
end loop;
close emp_cursor;
end;
/
===============================================================================
SOAL 3 MERAPIKAN TAMPILAN DENGAN MENGGUNAKAN %ISOPEN
===============================================================================
DECLARE
kdsen wali.kode_dosen%type;
enim wali.nim%type;
cursor wali_cursor is select kode_dosen,nim from
wali ;
BEGIN
OPEN wali_cursor;
if wali_cursor%isopen then
dbms_output.put_line('========================');
dbms_output.put_line('NO DOSEN NIM');
dbms_output.put_line('========================');
end if;
LOOP
fetch wali_cursor into kdsen,enim;
exit when wali_cursor%notfound;
dbms_output.put_line(
rpad(wali_cursor%rowcount,5,' ')||
rpad(kdsen,8,' ')||
rpad(enim,12,' '));
end loop;
close wali_cursor;
end;
/
============================================================
hasil :
========================
NO DOSEN NIM
========================
1 ELR 1010005
2 ELR 1110001
3 ANR 1210101
Comments
Post a Comment