latihan cursor

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

Popular Posts