Sunday, March 22, 2009

TP Basdat Common Labz Modul IV

1. Pengulangan/looping pada PL/SQL ada 3 yaitu
    a. LOOP-EXIT STATEMENT
        sintax:  LOOP
                                statement;
                                .................;
                       EXIT [WHEN kondisi];
                       END LOOP;
         atau
                       LOOP
                               statement;
                               ..................;
                               IF [kondisi] THEN EXIT;
                       END LOOP;
        
        contoh:
declare 
v_ab char(6):='danang';
v_hit number:=1;

begin
loop
dbms_output.put_line(v_ab);
v_hit:=v_hit+1;
if v_hit > 5 then
exit;

end if;
end loop;
end;
/
   b. WHILE-LOOP STATEMENT
         sintax: WHILE kondisi LOOP
                             statement;
                             ..................;
                       END LOOP;
        contoh:
declare 
v_ab char(9):='113070262';

v_hit number:=1;

begin
while v_hit<=5 loop


dbms_output.put_line(v_ab);
v_hit:=v_hit+1;
end loop;

end;
/
   c. FOR-LOOP STATEMENT
       sintax: FOR variable-control IN nilaimin..nilaimax
                    LOOP
                            statement;
                            ..................;
                    END LOOP;
      contoh:

declare 


v_ab char(7):='ganteng';
v_hit number;



begin


for v_hit in 1..5
loop
dbms_output.put_line(v_ab);
end loop;
end;


/


2. PL/SQL untuk menampilkan jam pasir
declare
n number:='&113070262';
i number;
j number;

begin
for  i in 1..n
loop
for j in 1..n
loop
if (j>=i and j<=n-i+1) or (j<=i and j>=n-i+1) then
dbms_output.put('#');
else
dbms_output.put('-');
end if;
end loop;
dbms_output.put_line(chr(13));
dbms_output.put_line(chr(13));
end loop;
end;
/

3. xxxxxx

4. Cursor (dalam konteks database) adalah sebuah kerja dalam memory dimana ORACLE meletakkan current SQL statement. Cursor merupakan variabel yang menunjukkan basis data hasil sebuah query.
Kegunaan cursor:
   a. Menerima hasil query yang jumlah barisnya lebih dari satu.
   b. Memungkinkan untuk melakukan proses yang lebih kompleks untuk tiap record.

5. sintax untuk jawaban ini
DECLARE 
vidsek Sekolah.id_sekolah%type := upper('&113070262');
vnama_sekolah Sekolah.nama%TYPE;
v_a Calon_Peserta.NIS%TYPE;
v_b Calon_Peserta.Nama%TYPE;
CURSOR c1 IS SELECT NIS, Nama FROM Calon_Peserta
WHERE ID_Sekolah = vidsek;
BEGIN
OPEN c1;
SELECT Nama INTO vnama_sekolah FROM Sekolah
WHERE ID_Sekolah = vidsek;
dbms_output.put_line('Calon Peserta dari Sekolah ' || vnama_sekolah || ' adalah: ');
dbms_output.put_line('NO===NIS=== ====NAMA====');
LOOP
FETCH c1 INTO v_a,v_b;
EXIT WHEN c1%NOTFOUND;
dbms_output.put_line(c1%ROWCOUNT || '. ' || v_a || ' ' || v_b);
END LOOP;
dbms_output.put_line('Jumlah Peserta adalah: ' || c1%ROWCOUNT);
CLOSE c1;
END;
/
/

6. sintax jawaban
DECLARE
vnamalok lokasi_ujian.nama_lokasi%type := '&113070262';
v_nama Panitia.Nama%TYPE;
v_jabatan Panitia.Jabatan%TYPE;
v_telepon Panitia.No_Telp%TYPE;
CURSOR c1 IS SELECT Panitia.Nama, Panitia.Jabatan, Panitia.No_Telp, vnamalok FROM Panitia, Lokasi_ujian
WHERE Panitia.kode_lokasi = Lokasi_Ujian.kode_lokasi AND Lokasi_Ujian.Nama_Lokasi = vnamalok;
BEGIN
OPEN c1;
dbms_output.put_line('Panitia di ' || vnamalok || ' adalah : ');
LOOP
FETCH c1 INTO v_nama, v_jabatan, v_telepon, vnamalok;
EXIT WHEN c1%NOTFOUND;
dbms_output.put_line(c1%ROWCOUNT || '. ' || v_nama || ' menjabat sebagai ' || v_jabatan || ', telp : ' || RPAD(v_telepon,length(v_telepon)-2) || 'XX');
END LOOP;
dbms_output.put_line('Jumlah panitia adalah: ' || c1%ROWCOUNT);
CLOSE c1;
END;
/

Semoga membantu. :)

No comments: