Pert 6 - Executable Statements
Pert 6 - Executable Statements
Objektif :
Karena PL/SQL adalah perluasan dari SQL, aturan sintak umum yang terdapat pada SQL
juga diterapkan untuk bahasa PL/SQL.
• Unit leksikal ( contohnya : identifikasi, dan literal) dapat dipisahkan oleh satu atau
banyak spasi atau beberapa pembatas yang tidak membingungkan sebagai bagian dari
leksikal unit. Anda tidak dapat meletakan spasi dalam unit leksikal, kecuali untuk
literal string dan komentar.
• Statement dapat dipisahkan dengan spasi, tetapi tidak untuk kata kunci.
7.2. Delimiters
Delimiters terdiri dari simbol tunggal dan simbol majemuk yang mempunyai arti khusus
untuk PL/SQL.
Identifiers
Identifiers atau pengidentifikasi digunakan untuk memberi nama pada unit dan program
PL/SQL, yang termasuk konstanta, variabel, exceptions, cursors, cursors variabel,
subprogram and packages.
- Pengidentifikasi PL/SQL dapat berisi sampai 30 karakter, tetapi harus dimulai dengan
karakter alfabet.
- Jangan memilih nama yang sama untuk identifikasi dari nama kolom yang sudah
digunakan. Jika identifikasi PL/SQL sama dengan statement SQL dan mempunyai
nama yang sama dengan nama kolom, maka oracle menerima itu sebagai kolom yang
tereferensi.
- Reserved words atau kata yang tersedia dari PL/SQL, tidak dapat digunakan sebagai
identifikasi jika tidak memasukkan tanda petik ganda (“ “), sebagai
contoh.”SELECT”
- Reserved words harusnya ditulis dalam huruf besar untuk dapat dibaca.
Literal-Literal
• Literal dapat berupa angka, karakter, string atau boolean, nilai yang tidak dapat
diwakili dengan identifikasi.
- Karakter literal termasuk karakter yang dapat dicetak dalam set karakter PL/SQL:
huruf, angka, spasi dan spesial simbol.
- Numerik(angka) literal dapat diwakili juga salah satunya dengan nilai tunggal
(contohnya : -3.25) atau dengan notasi ilmiah (contohnya: 2E5, artinya 2 pangkat
5=200000).
• Sebuah blok PL/SQL dimulai dan diakhiri dengan / (Slash) pada baris itu sendiri.
Kode Komentar
Kode Komentar digunakan untuk mendokumentasikan setiap tahap dan untuk membantu
dalam pencarian kesalahan. Untuk membuat komentar dapat digunakan dua garis (--) jika
komentar hanya satu baris, atau masukkan komentar diantara simbol /*dan */ jika
komentar terdiri atas beberapa baris. Komentar adalah informasi yang tepat dan jangan
menulis kondisi apapun atau perilaku yang logis atau data.
Contoh :
v_sal NUMBER (9,2) ;
BEGIN
/* Compute the annual salary based on the monthly
salary
input from users*/
v_sal:=sp_monthly_sal * 12;
END; --This is the end of the block
Dalam contoh di atas, baris yang ada pada /* dan */ adalah komentar yang menjelaskan
kode yang mengikutinya.
PL/SQL mencoba untuk mengubah tipe data secara dinamis, saat digabungkan dalam
sebuah pernyataan. contoh jika anda menugaskan sebuah nilai angka pada variabel Char
kemudian PL/SQL secara dinamis akan menterjemahkan nilai angka tadi menjadi
karakter, kemudian dapat tersimpan pada variabel karakter. Demikian pula sebaliknya
selama ekspresi karakter mewakili nilai dari angka (numeric).
Selama semuanya cocok, anda juga dapat memasukkan karakter ke variabel tanggal dan
juga sebaliknya.
Dengan ekspresi, anda dapat memastikan tipe data yang sama. Jika terjadi penggabungan
tipe data dalam ekspresi, anda harus menggunakan fungsi konversi yang tepat untuk
mengubah data.
Sintak
TO_CHAR(value, fmt)
TO_DATE(value, fmt)
TO_NUMBER(value, fmt)
Satu dari keuntungan PL/SQL adalah adanya perintah bersarang (nest). Anda dapat
menempatkan blok bersarang dimanapun statement tsb dapat dijalankan, dengan
demikian pembuatan blok bersarang dapat memecah bagian eksekusi dari blok yamg
besar menjadi block yang lebih kecil, exception section juga dapat berisi blok bersarang.
Scope dari sebuah objek adalah daerah program yang dapat dimasukkan dalam objek,
anda dapat menunjuk pada variabel deklarasi dengan bagian yang dapat dieksekusi.
7.7. Identifiers
Sebuah identifikasi terlihat pada blok dimana telah dijelaskan dan pada semua subblok
nested, prosedur dan fungsi. Jika blok tersebut tidak ditemukan pada penjelasan
identifikasi secara ruang lingkup blok tersebut, maka blok akan memasuki bagian
pendeklarasian dari induk blok. Blok tak pernah terlihat down untuk memasuki anak/child
blok. atau sisi jalan ke blok sejenisnya.
7.8. Nested Block dan Variable Scope
Pada nested block gambar di atas, variabel diberi nama y yang dapat menujukkan variabel
x, sedangkan variabel x bagaimanapun tidak dapat menujukkan variabel y, jika variabel y
dalam nested blok memberi nama yang sama dengan variabel x dalam blok terluar nilai
yang hanya berlaku dan valid selama dalam nested blok.
7.9. Scope
Scope dari identifikasi adalah daerah unit program (blok, subprogram, atau packages)
dimana anda dapat menunjukkan identifikasi. Sebuah identifikasi hanya terlihat dalam
daerah yang dapat menunjukkan penggunaan identifikasi nama yang tidak bersyarat.
7.10. Operator-Operator Dalam PL/SQL
Operator yang terdapat dalam PL/SQL sama dengan yang ada di SQL.
Prioritas operasi yang akan dijalankan berdasarkan level tertinggi ke level terbawah.
Operator-Operator Dalam PL/SQL
Operator Operations
**, NOT Pangkat, logika ingkaran
+, - Identitas, ingkaran
*, / Perkalian, Pembagian
+,=,|| Penjumlahan,pengurangan,concatenation
=,!=,<>,<=,>=,IS Perbandingan
NULL,LIKE,BETWEEN,IN
AND Hubungan persamaan
OR Hubungan pemilihan
Contoh :
v_count :=v_count + 1 ;
Ketika mengerjakan dengan NULL, anda dapat menghindari beberapa kesalahan umum
dengan tetap mengikuti peraturan berikut ini :
- Membandingkan dengan NULL, selalu menghasilkan NULL
- Memakai operator logika NOT ke dalam sebuah null menghasilkan NULL
- Dalam kondisi statement kontrol, jika kondisi menghasilkan NULL, maka gabungan
terkait urutan dari statement adalah tidak dijalankan.
7.11. Mencetak Bind Variabel
Bind Variabel
Sebuah bind variabel adalah sebuah variabel yang dideklarasikan dalam sebuah
lingkungan host dan digunakan untuk melewati runtime, baik angka NUMBER atau
CHARACTER, ke dalam atau ke luar dari satu atau lebih progral PL/SQL, yang dapat
digunakan seperti menggunakan variabel yang lain. Selain itu daoat mereferensi variabel
yang dideklarasikan dalam host atau memanggil lingkungan di perintah PL/SQL, kecuali
perintahnya berada dalam sebuah bahasa prosedur, function, atau paket. Variabel ini
termasuk variabel host yang dideklarasikan dalam program compiler awal.
Baik SQL maupun SQL*Plus dapat mereferensi variabel bind dan SQL*Plus dapat
menampilkan nilainya.
Menampilkan Bind Variabel
Untuk menampilkan nilai dari bind variabel dalam lingkungan SQL*Plus, gunakan
perintah PRINT, tetapi PRINT tidak dapat digunakan dalam sebuah blok PL/SQL seperti
sebuah perintah SQL*Plus.
Contoh di bawah ini mengilustrasikan sebuah perintah PRINT:
Contoh: Menghitung gaji perbulanan berdasarkan dari persediaan gaji tahunan yang
diterima oleh user. Skrip ini terdiri dari perintah SQL*Plus dan blok
PL/SQL.
PRINT g_monthly_sal
Berikut adalah contoh lain untuk menampilkan gaji pegawai yang diinginkan:
Untuk menunjukkan variabel bind dalam PL/SQL, anda harus menamai awalan dengan :
( titik dua ). Dalam SQL Plus anda dapat menunjukkan nilai-nilai dari variabel bind
menggunakan perintah PRINT
SQL> PRINT g_salary
G_SALARY
800
Contoh: Blok PL/SQL yang menerima dua angka melalui variabel substitusi SQL*Plus.
Angka pertama akan dibagi oleh angka kedua, kemudian hasilnya akan ditambah dengan
angka kedua tersebut. Hasilnya akan di simpan dalam variabel PL/SQL dan di tampilkan
dalam layar, atau hasilnya akan disimpan dalam variabel SQL*Plus dan di tampilkan
dalam layar. (lihat video 3a dan 3b)
a. Ketika menggunakan variabel PL/SQL:
b. Ketika menggunakan variabel SQL*Plus:
Contoh: Sebuah blok PL/SQL yang menghitung total kompensasi gaji untuk satu tahun.
Gaji tahunan dan persentase bonus tahunan akan di masukkan ke dalam blok PL/SQL
melalui variabel substitusi SQL*Plus, kemudian bonus tersebut harus dikonversi ke
dalam bentuk desimal (contoh, 15 ke .15). Jika ada gaji null, ubah menjadi nol sebelum
menghitung jumlah kompensasi. Eksekusi blok PL/SQL tersebut. Catatan: Gunakan
fungsi NVL untuk menangani nilai null.
(lihat video 4a dan 4b)
Catatan: Untuk menguji fungsi NVL, tulis NULL di dalam prompt; tekan [Enter] untuk
menghasilkan error „missing expression‟.
Option Lain
Pilihan lain untuk menampilkan informasi dari sebuah blok PL/SQL adalah
DBMS_OUTPUT.PUT_LINE. DBMS_OUTPUT.PUT_LINE adalah paket pendukung
Oracle, dan PUT_LINE adalah sebuah prosedur dalam paket tersebut. Dalam sebuah blok
PL/SQL, referensi DBMS_OUTPUT.PUT_LINE, yang diikuti dengan literal karakter
yang diapit tanda kurung, informasi tersebut yang akan ditampilkan di layar. Paket
informasi harus dapat dijalankan pertama kali dalam bagian SQL*PLUS, dan
menjalankannya, gunakan perintah SQL*Plus “SET SERVEROUTPUT ON”.
SET SERVEROUTPUT ON
Menghindari Kerangkapan/Kerancuan
- Nama-nama variabel lokal dan parameter resmi harus mendahulukan nama-nama dari
tabel database.
- Nama dari kolom mendahulukan nama dari variabel lokal.
7.13. Penamaan Kode Konvensi
Agar jelas, dan dapat lebih mudah dibaca, masukkan masing-masing tingkat kode. Untuk
menunjukkan struktur, anda dapat membagi garis menggunakan Enter dan masukkan
garis dengan menggunakan spasi atau tabs. Bandingkan Statement IF berikut ini untuk
memudahkan pembacaan.
IF x>y THEN v_max:=x;ELSE v_max:=y;END IF
IF x > y THEN
v_max := x;
ELSE
v_max := y;
END IF;