Tuesday 3 March 2015

Modul Praktikum Data Mining "PENGENALAN PL/SQL DAN TIPE DATA"

Praktikum 1
PENGENALAN PL/SQL DAN TIPE DATA

Tujuan :
1.      Mengerti esensi penggunaan Percabangan (pemilihan/kodisional) dalam PL/SQL.
2.      Mengerti  esensi  penggunaan  Pengulangan      (Looping/Iterasi)  dalam PL/SQL.
3.      Mengerti esensi penggunaan Sekuensial dalam PL/SQL.
4.      Memahami bentuk umum Percabangan, Pengulangan dan Sekuensial.
5.      Mampu  memecahkan  masalah  sederhana  dengan  menggunakan Percabangan atau Pengulangan atau  Sekuensial dan mengimplementasikan ke dalam PL/SQL.

Alat dan Bahan :

1.      Buku literatur mengenai PL/SQL ORACLE, terutama yang menggunakan DBMS ORACLE 10g.
2.      Modul praktikum BASIS DATA LANJUT
3.      Modul praktikum DATA MINING DAN WAREHOUSING

Landasan Teori :

1.      Pendahuluan 
Karena pada SQL tidak mendukung pemrograman secara prosedural, maka  dikembangkanlah PL/SQL. PL merupakan kependekan dari Procedural  Language. PL/SQL mengkombinasikan kekuatan dan kefleksibilitasan SQL  dengan pemrograman prosedural. PL/SQL memiliki keistimewaan sebagai  berikut: 

a.      Programmer dapat mendeklarasikan variable untuk digunakan selama pemrosesan statement. 
b.      Programmer  dapat  menggunakan  penanganan  kesalahan  untuk mencegah kegagalan program. 
c.       Programmer dapat menulis program yang interaktif yang menerima input dari user. 
d.      Programmer dapat membagi fungsi-fungsi ke dalam blok-blok lojik dari kode. Teknik pemrograman secara modular ini mendukung fleksibilitas selama pengembangan aplikasi. 
e.      Statement SQL dapat diproses secara simultan untuk performansi keseluruhan yang lebih baik. 

2.      Deklarasi Variabel dan Tipe Data
Bagian  deklarasi  variabel  di  antara  kata  kunci  DECLARE  dan  BEGIN.  Penamaan variabel tidal bersifat case sensitive. Tipe data variabel dapat  berupa salah satu tipe data database Oracle atau tipe data built in PL/SQL. 
Sintaks:  

Identifier tipedata [(presisi, skala)] [NOT NULL] [:=iekspresi];
Dimana ekspresi bisa merupakan literal, variabel yang lain  atau sebuah ekspresi yang terdiri atas operator dan fungsi. Jika nilai inisial/awal tidak diberikan, maka suatu variabel akan diberikan nilai NULL untuk nilai inisialnya. Contoh untuk data karakter:  



alamat VARCHAR2(20);  kodepos CHAR(5) := ‘40257’;              


Contoh untuk tipe data number: 



gaji NUMBER(7,2);  jumlah NUMBER NOT NULL := 0;  

Contoh untuk tipe data tanggal: 



alamat VARCHAR2(20);  kodepos CHAR(5) := ‘40257’;  

Tanda := dipakai untuk menugaskan (assign) nilai kepada suatu variabel. Nilai inisial/awal atau disebut juga nilai default adalah nilai yang diberikan pada saat awal variabel tersebut dideklarasikan. 

Selain tipe data yang ada di Oracle SQL, PL/SQL menyediakan beberapa tambahan tipe data yang dapat dideklarasikan sebagai berikut: 


Tipe Data

Keterangan

BOOLEAN

Data lojikal dengan nilai TRUE atau FALSE.

DATE

Data tanggal waktu. Nilai yang valid adalah antara 1 Januari 4712 SM sampai dengan 31 Desember 9999.

NUMBER [(p [,s])] 

Tipe data numerik dengan p angka penting dan sejumlah s angka penting di belakang koma. Nilai p adalah integer dengan nilai maksimal 38 dan nilai s berada pada rentang -84 sampai dengan

127. Nilai s negatif berarti pembulatan sampai dengan 10s terdekat. 

FLOAT

Turunan dari NUMBER. Presisi sampai dengan 38 digit.

DOUBLE PRECISION

Sama dengan FLOAT.

REAL

Turunan dari number. Presisi sampai dengan 18 digit.

DEC [(p [,s])]

Sama dengan NUMBER  [(p [,s])].

DECIMAL [( p [,s])]

Sama dengan NUMBER  [(p [,s])].

NUMERIC [(p [,s])]

Sama dengan NUMBER  [(p [,s])].

INTEGER [(n)]

Sama dengan NUMBER  [(n,0)].

INT [(n)]

Sama dengan NUMBER  [(n,0)].

SMALLINT [(n)]

Sama dengan NUMBER  [(n,0)].

BINARY_INTEGER

Tipe variabel ini digunakan menyimpan nilai mulai dari -

2.147.483.647 s/d 2.147.483.647 

NATURAL

Bagian  dari  binary  integer, mampu  menyimpan mulai dari 0 s/d 2.147.483.647. 

NATURALN

Bagian  dari  binary  integer, mampu  menyimpan mulai dari 0 s/d 2.147.483.647. Tipe data ini tidak boleh bernilai NULL. 

POSITIVE

Bagian  dari  binary  integer, mampu  menyimpan mulai dari 1 s/d

2.147.483.647

POSITIVEN

Bilangan integer dengan rentang nilai 1  sampai dengan 2147483647.  Tipe data ini tidak boleh bernilai NULL.

SIGNTYPE

Tipe data bilangan yang bernilai -1, 0 atau 1.

PLS_INTEGER

Bilangan integer dengan rentang nilai -2147483647 sampai 2147483647.

VARCHAR2(n)

Data karakter dengan panjang tidak tetap. Nilai n minimum sama dengan 1 dan maksimum sama dengan 32767 byte.

VARCHAR(n)

Sama dengan VARCHAR2(n).

CHAR [(n)]

Data karakter dengan panjang tetap sebesar  n byte. Nilai n maksimum adalah 32767.  Nilai n minimum dan juga nilai default adalah 1.

STRING(n)

Sama dengan VARCHAR2(n).

CHARACTER [(n)]

Sama dengan CHAR(n).

LONG [(n)]

Data karakter dengan panjang tidak tetap. Nilai n maksimum sama dengan 32760 byte.

NCHAR [(n)]

Data  karakter  dengan  panjang  tetap.  Panjang maksimum sama dengan 32767 byte. Maksimum bergantung pada national character set yang dipakai. Nilai default adalah 1.

NVARCHAR2(n)

Data karakter dengan panjang tidak tetap. Panjang maksimum  sama  dengan 32767  byte.  Nilai n maksimum bergantung pada national character set yang dipakai.

RAW(n)

Data binary dengan panjang tidak tetap. Nilai n maksimum sama dengan 32767 byte.

LONG RAW [(n)]

Data binary dengan panjang tidak tetap. Nilai n maksimum sama dengan 32760 byte. 

ROWID

Identitas  baris  pada  suatu  tabel-index  yang dinyatakan dengan string heksa desimal. Identitas tersebut menunjukkan posisi baris data. Tipe data ini merupakan balikan dari kolom palsu ROWID.

UROWID [(n)]

Identitas  baris  pada  suatu  tabel-index  yang dinyatakan dengan string heksa desimal. Nilai n adalah   ukuran   kolom   UROWID.  

Nilai   n maksimum adalah 4000 byte.

BFILE

Tipe data large object untuk data file.

BLOB

Tipe data large object untuk karakter binary.

CLOB

Tipe data large object untuk karakter satu byte.

NCLOB

Tipe data large object untuk karakter multi byte.

%TYPE

Untuk mendeklarasikan variabel dengan tipe data yang sesuai dengan suatu kolom pada suatu tabel. 

%ROWTYPE

Untuk mendeklarasikan variabel dengan tipe data yang sesuai dengan semua kolom pada suatu tabel. Biasanya untuk menampung suatu cursor.
3.      Pendeklarasian Konstanta 
Sintaks: 

Identifier CONSTANT tipedata[(presisi,skala)] := ekspresi;
Contoh: 

            pi CONSTANT NUMBER(9,2):=3.14;

4.      Atribut Variabel 
Jika menggunakan variabel yang menampung nilai dari suatu kolom dari suatu tabel, maka  sebaiknya menggunakan atribut variabel. Hal ini untuk menghindari terjadinya kerepotan seperti: user harus melihat struktur tabel yang terkait terlebih dahulu untuk memberikan tipe data yang cocok. Selain itu jika terjadi tipe data kolom maka deklarasi variabel tersebut harus diubah juga.

Atribut variabel berfungsi untuk memberikan tipe data yang sama dengan tipe data suatu kolom dari suatu tabel. Atribut variabel juga dapat digunakan untuk tipe data record. Dengan demikian, atribut variabel ada dua. Untuk atribut kolom  digunakan %TYPE,  sedangkan untuk atribut record gunakan %ROWTYPE. Cara penggunaannya ditunjukkan berikut ini: 

[schema.]table.column%TYPE;  



<cursor_name|[schema.]table>%ROWTYPE;
Sebagai     contoh,            variabel           v_nama           mempunyai     tipe      data     yang    sama       dengan  kolom            nama   pada    tabel    pegawai.         Deklarasi         variabel           tersebut       dapat   dituliskan  seperti ini: 

v_nama mahasiswa.nama%TYPE;
Selain dapat digunakan untuk variabel record, atribut %ROWTYPE bisa dipakai pada variabel cursor. Dan untuk mengakses baris-baris pada cursor atau record tersebut digunakan format nama_var.COLUMN.
 
Contoh: 

pgw_rec pgw_cur%ROWTYPE;
Menugaskan Nilai ke Dalam Variabel 
Sintaks: 

identifier := ekspresi;
Dimana identifier adalah nama variabel target, atau field untuk menerima nilai dari ekspresi. Sedang ekspresi mungkin berupa literal, nama variabel lain yang sudah ada, atau suatu ekspresi yang cukup kompleks yang diperlukan untuk menentukan suatu nilai yang akan ditugaskan. 

Contoh: 

 v_jumlah := 0; 

5.      Operator pada PL/SQL 
Operator-operator SQL statement juga berlaku pada PL/SQL. Berikut ini prioritas dari semua operator tersebut ditampilkan pada tabel di bawah ini dengan prioritas yang lebih tinggi ditempatkan pada baris yang lebih atas: 


Operator

Operasi

**, NOT

Pemangkatan dan negasi logika

+, -

Tanda positif dan negatif

*, /

Perkalian dan pembagian

+, -, ||

Penjumlahan., pengurangan dan konkatinasi

=,<,>,<=,>=,<>,!=, 

IS NULL, LIKE, BETWEEN, IN

Perbandingan

AND

Konjungsi

OR

Inklusi

6.      Mencetak Keluaran pada Layar SQL*Plus
Untuk mencetak sebuah nilai pada layar SQL*Plus dapat digunakan procedure PUT,   PUT_LINE dan NEW_LINE yang terdapat dalam package DBMS_OUTPUT. Package ini merupakan salah satu package yang telah built in pada Oracle.

Procedure PUT dan PUT_LINE membutuhkan sebuah argumen berupa NUMBER, VARCHAR2 ataupun DATE. Kedua procedure tersebut akan menyimpan argumen tersebut ke dalam buffer dan akan ditampilkan di layar bila procedure tersebut dijalankan.  

Procedure NEW_LINE tidak membutuhkan argumen apapun. Procedure ini berfungsi untuk menyimpan karakter new line ke dalam buffer.  

Namun sebelum procedure tersebut dijalankan, harus dijalankan perintah “SET SERVEROUTPUT ON” untuk mengaktifkan pencetakan ke layar dengan menggunakan procedure yang ada pada package DBMS_OUTPUT.  

SET SERVEROUTPUT <ON|OFF> [SIZE n] [FOR[MAT] 

<WRA[PPED] | WOR[D_WAPPED] | TRU[NCATED]]

Pilihan SIZE n bertujuan untuk menentukan jumlah byte maksimum yang dapat ditampung oleh buffer. Nilai n ini tidak boleh kurang dari 2000 dan tidak  boleh  lebih  dari 1.000.000.  Nilai  defaultnya 2000.  pilihan  format bertujuan untuk menetukan format keluaran. WRAPPED akan melanjutkan bagian yang tidak mencukupi dari suatu baris ke baris yang   baru. Pilihan TRUNCATE akan memotong bagian yang melampaui ukuran satu baris tepat pada karakter yang berada setelah batas maksimum baris. Ukuran satu baris, yakni jumlah karakter maksimum dalam satu baris, ditentukan oleh sistem variabel LINESIZE.




7. Struktur Blok PL/SQL 
Terdapat dua macam blok pada PL/SQL yaitu blok bernama dan blok tidak bernama (anonymous block), dimana blok-blok ini akan membentuk suatu unit  PL/SQL. Blok-blok  yang bernama bisa disimpan dan dapat berupa procedure, function serta trigger. Sedangkan blok yang tidak bernama tidak dapat disimpan dalam database kecuali jika dipakai sebagai subblok dalam sebuah unit PL/SQL bernama.  

Secara umum, satu blok PL/SQL yang lengkap terdiri atas tiga bagian, yaitu : declaration section (bagian deklarasi variabel), executable section (bagian  pengeksekusian) serta exception section (bagian  penanganan kesalahan). Berikut ini penggambarannya: 

[DECLARE 



     ...]

BEGIN

 DECLARATION SECTION

[EXCEPTION

 EXECUTABLE SECTION

     ...]

END; 

 EXCEPTION SECTION

Dengan declaration dan exception bersifat opsional, maka satu bok PL/SQL paling tidak terdiri atas executable section. 
Contoh: 

BEGIN

NULL; END;

Catatan: Null dipakai untuk menyatakan nilai yang tidak diketahui, sehingga untuk contoh di atas, blok PL/SQL tersebut tidak melakukan proses apapun.

a.      DECLARATION SECTION 
Digunakan  untuk  mendefinisikan  atau  mendeklarasikan  variabel,  konstanta, cursor dan seluruh exception yang didefinisikan oleh user yang  akan digunakan pada bagian eksekusi. Penulisan blok ini dimulai dengan  menulis DECLARE.  
Contoh:  

DECLARE



v_nama

mahasiswa.nama%TYPE;

v_nim 

mahasiswa.nim%TYPE;

b.      EXECUTABLE SECTION 
Digunakan  untuk  mengeksekusi  atau  menjalankan  blok  perintah PL/SQL seperti pengulangan, percabangan, perintah SQL dan perintah cursor. Berisi statement SQL untuk memanipulasi data pada basis data dan statement PL/SQL untuk memanipulasi data dalam blok.  
Contoh:  

DECLARE

v_nama mahasiswa.nama%TYPE; v_nim  mahasiswa.nim%TYPE;

BEGIN

SELECT nim, nama INTO v_nim, v_nama FROM pegawai 

WHERE nim=30108001 

DBMS_OUTPUT.PUT_LINE(v_nama); 

EXCEPTION 

WHEN NO_DATA_FOUND THEN 

DBMS_OUTPUT.PUT_LINE(‘gak ada’);

END;





c.       EXCEPTION SECTION 
Merupakan bagian yang akan diaktifkan bila terjadi kesalahan atau pengecualian pada saat menjalankan program PL/SQL. Exception section terdiri atas predefined dan user defined. Sebagai contoh exception predefined NO_DATA_FOUND  akan  diaktifkan  bila  perintah  DML  SQL  tidak menemukan data dalam klausa WHERE. Contoh:


DECLARE v_nama mahasiswa.nama%TYPE; v_nim  mahasiswa.nim%TYPE;

BEGIN 

SELECT nim, nama INTO v_nim, v_nama FROM pegawai 

WHERE nim=30108001 

DBMS_OUTPUT.PUT_LINE(v_nama); 

EXCEPTION 

WHEN NO_DATA_FOUND THEN 

DBMS_OUTPUT.PUT_LINE(‘gak ada’); 

END;
 
8.      Struktur Kondisional 
Perintah IF terdiri atas tiga bentuk, yaitu IF THEN, IF THEN ELSE, serta IF THEN ELSEIF. Struktur dari ketiganya ditampilkan dalam satu rumusan umum sebagai berikut:  

IF kondisi 1 THEN 

     Baris perintah...



[ELSIF kondisi 2 THEN 

     Baris perintah...] 



[ELSE  baris perintah..]



END IF;

Baris pada baris perintah dapat berupa perintah IF sehingga akan membentuk blok IF bersarang. Bagian ELSIF bisa muncul beberapa kali sesuai dengan kebutuhan sedangkan bagian ELSE biasanya dipakai untuk menangani kondisi jika semua kondisi pada kalang IF... THEN atau ELSIF... THEN tidak terpenuhi. Namun bagian ELSE ini bisa saja tidak digunakan. contoh: 

DECLARE penuh exception;  n1  number; 

n2 number;

BEGIN 

IF b1>n2 THEN 

RAISE penuh;

ELSE 

DBMS_OUTPUT.PUT_LINE(‘bisa’);

ENS IF;  END;


9.      Struktur Iterasi 
a.      Pernyataan Loop
Untuk perintah LOOP, akan dilakukan pengulangan terus-menerus. Bentuk umum dari pernyataan LOOP sebagai berikut:  

LOOP  

//Baris perintah



END LOOP;
Karena tidak mempunyai kondisi untuk keluar dari iterasi, maka perlu digunakan perintah EXIT. Perintah EXIT dapat digunakan dengan cara seperti berikut:

EXIT WHEN kondisi;  

Contoh: 

 DECLARE 

            x   number;

 BEGIN 

            x := 0; 

            LOOP 

x := x + 1; 



EXIT WHEN x > 5; -- exit loop immediately

            END LOOP; 

            DBMS_OUTPUT.PUT_LINE('Hasil looping : '||x);  END;

Bisa juga digunakan format seperti ini: 


IF kondisi THEN 

EXIT; 

END IF;
Contoh: 

 DECLARE 

            x   number; 

 BEGIN 

            x := 0; 

             

LOOP 



x := x + 1; 

            IF x > 5 THEN 

            EXIT; -- exit loop immediately

            END IF; 

            DBMS_OUTPUT.PUT_LINE('Hasil looping ke- '||x);

            END LOOP; 

END;

DECLARE  vno   number; 

BEGIN  vno:=1;



LOOP

INSERT INTO coba(no) VALUES vno; vno:=vno+1; 

IF vno > 10 THEN EXIT; 

END IF;

END LOOP;

END;

Pernyataan LOOP bisa diberi label atau nama, sintaksnya sebagai berikut : 

 <<label_name>> 

 LOOP 

            sequence_of_statements   END LOOP label_nama; //optional

Contoh: 

<<outer>>



LOOP 

            LOOP 

            EXIT outer WHEN ... -- exit both loops

            END LOOP; 

Pada contoh diatas, saat EXIT maka akan keluar dariEND LOOP outer;       kedua looping yang ada. 
b.      Pernyataan While - Loop 
Perintah WHILE-LOOP akan terus melakukan iterasi (memproses baris perintah secara berulang) selama KONDISI bernilai TRUE. Bentuk umum dari pernyataan LOOP sebagai berikut:

WHILE kondisi LOOP 

//Baris perintah

END LOOP;

Contoh:

DECLARE  x   number;

BEGIN  x := 0; 

      

     WHILE x <= 5 LOOP

          x := x + 1; 

DBMS_OUTPUT.PUT_LINE('Hasil looping ke- '||x); END LOOP; 

END;

Selain dapat digunakan pada perintah LOOP, perintah EXIT ini juga dapat digunakan pada WHILE-LOOP untuk menambahkan kondisi tertentu. Namun perintah EXIT ini hanya bisa digunakan dalam loop saja. 
Contoh: 

DECLARE vno number;

BEGIN vno:=1; 



WHILE vno <= 10 LOOP 

INSERT INTO coba(no) VALUES vno; EXIT WHEN vno = 10; vno:=vno+1; 

END LOOP;

END;

c.       Pernyataan For - Loop 
Struktur pengulangan For digunakan untuk menghasilkan pengulangan sejumlah kali tanpa penggunaan kondisi apapun. Stuktur ini menyebabkan aksi diulangi sejumlah beberapa kali (tertentu). Bentuk umum struktur for ada dua macam yaitu : menaik (ascending) atau menurun (descending). Sintaksnya sebagai berikut :

FOR counter IN [REVERSE] i_terendah .. i_teratas

LOOP

Baris perintah 

END LOOP;

Perintah FOR-LOOP melakukan iterasi selama nilai COUNTER berada dalam range nilai i_terendah dan i_teratas. Pada FOR-LOOP, counter tidak perlu dideklarasikan. Penggunaan kata kunci RESERVE akan menyebabkan nilai counter dimulai dari i_teratas ke i_terendah. Dua titik antara  i_terendah  dan  i_teratas  merupakan  operator  rentang  nilai. i_terendah maupun i_terkecil bisa berupa nilai integer ataupun variabel yang bernilai integer yang sudah dideklarasikan sebelumnya. i_upper harus lebih besar dari i_lower dan jika tidak maka iterasi tidak akan dilakukan. 
Contoh: 

BEGIN



FOR vno IN 1..10 LOOP 

            INSERT INTO coba(no) VALUES vno;

            DBMS_OUTPUT.PUT_LINE('Hasil looping ke- '||x);

            END LOOP; 

END;


 BEGIN

FOR vno IN REVERSE 1..10 LOOP 

INSERT INTO coba(no) VALUES vno;

            DBMS_OUTPUT.PUT_LINE('Hasil looping ke- '||x);

            END LOOP; 

END;



d.      Ruang Lingkup Pernyataan FOR - LOOP  Contoh :

 DECLARE      ctr INTEGER; -- global variable 

 BEGIN

            FOR ctr IN 1..25 LOOP

            IF ctr > 10 THEN ... -- refers to loop counter

END IF;



END LOOP;

 END;

Untuk menuju ke variabel global, harus ditambahkan label dan notasi dot. Contoh :

<<main>>

DECLARE  ctr INTEGER; 

BEGIN

FOR ctr IN 1..25 LOOP 

IF main.ctr > 10 THEN -- refers to global variable END IF;

END LOOP;

END main;

Hal ini juga berlaku untuk nested loop. 
Contoh : 

<<main>> 

DECLARE 

Ctr INTEGER;

BEGIN 

<<outer>> 

FOR step IN 1..25 LOOP 

FOR step IN 1..10 LOOP IF outer.step > 15 THEN

END IF; 

END LOOP; 

END LOOP outer;

END main;

Selain dapat digunakan pada perintah LOOP, perintah EXIT ini juga dapat digunakan pada FOR-LOOP untuk menambahkan kondisi tertentu. Namun perintah EXIT ini hanya bisa digunakan dalam loop saja. 
Contoh:


BEGIN

FOR j IN 1..10 LOOP 

FETCH c1 INTO mhs_rec;

EXIT WHEN c1%NOTFOUND;

END LOOP; 

END;






BEGIN

<<outer>>

FOR i IN 1..5 LOOP

FOR j IN 1..10 LOOP

FETCH c1 INTO mhs_rec;

EXIT outer WHEN c1%NOTFOUND; --exit both

FOR loops

END LOOP;

END LOOP outer; 

-- control passes here

END;

e.      Perintah GOTO
Perintah ini digunakan untuk mengarahkan proses ke baris yang ditandai dengan label tertentu. Bentuk umum pemakaian perintah ini adalah: 

GOTO nama_label;
Untuk memberikan label pada suatu baris tertentu, gunakan format penamaan label seperti berikut ini: 

<<nama_label>>
Penggunaan  perintah  GOTO  dalam  jumlah  yang  banyak  akan menyebabkan  suatu  blok  PL/SQL  menjadi  tidak  terstruktur.  Karena  itu sebaiknya penggunaan GOTO ini dihindari.
Contoh: 

DECLARE 

x    number;

BEGIN  x := 0;

LOOP  x := x + 1; 

IF x = 5 THEN 

GOTO EndOfLoop; 

END IF; END LOOP; 

<<EndOfLoop>>

DBMS_OUTPUT.PUT_LINE('Hasil looping : '||x); 

END;

Contoh: 

CREATE OR REPLACE PROCEDURE coba

(v_nim mahasiswa.nim%TYPE) IS 



CURSOR mhs_cur IS

SELECT nim, nama, alamat FROM mahasiswa WHERE nim=v_nim; mhs_rec mhs_cur%ROWTYPE;

BEGIN 

OPEN mhs_cur; 

<<iterasi>>

FETCH mhs_cur INTO mhs _rec;

IF mhs _cur%NOTFOUND THEN GOTO lbl_end;  END IF; 



DBMS_OUTPUT.PUT_LINE(mhs_rec.nama_pegawai||''||mhs_rec. alamat||''||mhs_rec.gaji); 



GOTO iterasi;


Dengan adanya perintah “goto iterasi”, proses berikutnya menuju baris “<<iterasi>>”  yang  berada  beberapa  sebelum  baris  goto  tersebut.
Selanjutnya, perintah-perintah yang mengikutinya akan diproses sesuai dengan  urutannya (sekuensial).  Sedangkan  perintah “<<lbl_end>>”  menentukan proses berikutnya adalah baris “<<lbl_end>>” yang berada setelah perintah goto tersebut.

Namun  demikian,  pada  saat  menggunakan  perintah  goto  harus diperhatikan halhal berikut: 
      Perintah goto tidak boleh menuju label yang berada dalam perintah IF, LOOP, blok lain dan blok yang menjadi sub bloknya.
      Sebuah label harus diikuti oleh paling tidak sebuah perintah eksekusi  PL/SQL. Kata atau reserved word seperti END, END IF dan END LOOP tidak termasuk sebagai perintah eksekusi. Tetapi NULL termasuk perintah eksekusi.

Tugas Pendahuluan :
1.      Jalankan dan  jelaskan maksud blok PL/SQL dibawah ini, jika nilai variabel input_nilai = 8:


DECLARE   nilai1 number;



nilai2 number;



nilai3 number; 

hasil number;  

      

BEGIN       

nilai1:=1;  nilai2:=1; 



nilai3:='&input_nilai';



DBMS_OUTPUT.PUT_LINE(nilai1||' '); 

DBMS_OUTPUT.PUT_LINE(nilai2||' ');   

      

LOOP   hasil:=nilai1+nilai2;   





IF hasil>=nilai3 THEN

                GOTO endloop; 

END IF;   

  

DBMS_OUTPUT.PUT_LINE(hasil||' ');  nilai1:=nilai2;



nilai2:=hasil;



END LOOP; 

<<endloop>>  

DBMS_OUTPUT.PUT_LINE(' ');  END;  

/

2.      Jalankan dan jelaskan maksud blok PL/SQL dibawah ini, jika nilai variabel batas_bawah = 1 dan variabel batas_atas = 20:

 DECLARE  batas_b number;  batas_a number;

  

  

BEGIN



batas_b:='&batas_bawah';

            batas_a:='&batas_atas';              WHILE batas_b<=batas_a LOOP

            IF MOD(batas_b,2)=1 THEN

            BDMS_OUTPUT.PUT_LINE(batas_b||'');

            END IF;

batas_b:=batas_b+1;



END LOOP;

            BDMS_OUTPUT.PUT_LINE(' ');

END;

/


Percobaan :
1.      Buatlah tampilan seperti ini pada SQL Plus:
2
4 
6 
8 
10 
12  

2.      Buatlah tampilan seperti ini pada SQL Plus:
1 3 5 7 9 11


Demikian yang dapat saya bagikan pada kesempatan kali ini, tunggu informasi tutorial ataupun lainnya selanjutnya. Terima Kasih dan Semoga Bermanfaat...
By : Adjie_ss

0 komentar:

Post a Comment