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