Anda di halaman 1dari 16

7.

PEMBUATAN STATEMENT YANG DAPAT


DIJALANKAN

Objektif :

• Mengenal pentingnya arti dari bagian pengeksekusian


• Menulis perintah-perintah pada bagian eksekusi.
• Menggambarkan aturan-aturan dari nested block.
• Mengeksekusi dan mengetes block syntax PL/SQL
• Menjalankan dan menguji blok PL/SQL.
7.1. Sintak Blok PL/SQL dan Panduannya

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.

Simbol Tunggal dan Simbol Majemuk


Simbol tunggal/Simple symbols Simbol Majemuk/Compound symbols
Simbol Keterangan Simbol Keterangan
+ operator penjumlahan <> operator pertidaksamaan
- operator pengurangan/ingkaran != operator persamaan
* operator perkalian || operator concatenation
/ Operator pembagian -- penunjuk komentar/single line
= Operator persamaan /* memulai komentar
@ Penunjuk jarak jauh */ akhir komentar
: Statement pembatas :- operator assignment

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.

7.3. Fungsi SQL dalam PL/SQL

Banyak dari fungsi SQL juga berlaku dalam ekspresi PL/SQL:


- Single-row number functions (Satu fungsi nomor baris)
- Single-row character functions (Satu fungsi karakter baris)
- Datatype conversion functions (Fungsi conversi tipe data)
- Date functions (Fungsi tanggal)
- Miscellaneous functions (Fungsi macam-macam)

Fungsi berikut tidak dapat digunakan dalam perintah prosedur:


- DECODE
- Fungsi-fungsi Grup: AVG, MIN, MAX, COUNT, SUM, STDEV, dan VARIANCE.
Fungsi grup menerapkan pada group di baris pada tabel dan hanya dapat digunakan
pada statement SQL pada blok PL/SQL.
Fungsi PL/SQL
PL/SQL menyediakan banyak fungsi untuk membantu anda dalam memanipulasi data.
Membangun kesalahan fungsi kategori berikut:
- Error reporting (Laporan Error)
- Number (Angka)
- Character (Karakter)
- Conversion (Konversi)
- Date (Tanggal)
- Miscellaeous (macam-macam)

7.4. Konversi Tipe Data

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)

dimana value : berisi karakter string, angka, atau tanggal


fmt : berisi model format yang digunakan untuk mengubah nilai.
Contoh :
v_date:=’January 13, 1998’;
v_date:=TO_DATE(‘January 13,1998’,’Month DD,YYYY’);

PL/SQL mencoba melakukan konversi jika memungkinkan, tetapi keberhasilannya


tergantung dari operasi yang dilakukan.

7.5. Blok Bersarang (Nested Blocks)

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.

7.6. Variabel Scope

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

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 ;

v_equal := ( v_n1 = v_n2 ) ;

v_valid := (v_empno IS NOT NULL ) ;

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.

Membuat Bind Variabel


Untuk mendeklarasikan sebuah variabel bind ke dalam lingkungan SQL*Plus, gunakan
perintah VARIABLE
Contoh: Deklarasikan sebuah variabel bertipe NUMBER dan VARCHAR2 seperti di
bawah ini:

VARIABLE return_code NUMBER


VARIABLE return_msg VARCHAR2(30)

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:

SQL > VARIABLE g_n NUMBER


….
SQL > PRINT g_n

Memberikan Nilai ke Variabel


Untuk mereferensi variabel host, harus memberi awalan referensi dengan tanda titik
dua(:) untuk membedakan variabel dari deklarasi PL/SQL.

Contoh: Menghitung gaji perbulanan berdasarkan dari persediaan gaji tahunan yang
diterima oleh user. Skrip ini terdiri dari perintah SQL*Plus dan blok
PL/SQL.

VARIABLE g_monthly sal NUMBER


ACCEPT g_annual_sal PROMPT „Please enter the annual salary: „
DECLARE v_sal NUMBER(9,2) :=&g_annual_sal;

BEGIN :g_monthly_sal := v_sal/12;


END;
/

PRINT g_monthly_sal
Berikut adalah contoh lain untuk menampilkan gaji pegawai yang diinginkan:

VARIABLE g_salary NUMBER


DECLARE
v_sal emp.sal%TYPE;
BEGIN
SELECT sal
INTO v_sal
FROM emp
WHERE empno = 7369;
:g_salary := v_sal;
END;
/

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”.

Contoh: Menghitung gaji bulanan dan menampilkan hasilnya di layar dengan


menggunakan DBMS_OUTPUT.PUT_LINE.

SET SERVEROUTPUT ON

ACCEPT p_annual_sal PROMPT „Please enter the annual salary: „


DECLARE

v_sal NUMBER (9,2):=&p_annual_sal;


BEGIN
v_sal := v_sal/12;
DBMS_OUTPUT.PUT_LINE („The monthly salary is „ |
TO_CHAR(v_sal));
END;
/
7.12. Panduan Program

Membuat kode maintenance/pemeliharaan sangat mudah dengan:


- Menyimpan kode dengan komentar.
- Mengembangkan kasus konvention untuk kode.
- Mengembangkan nama konvensi untuk mengidentifikasi objek lain.
- Menambah kemudahan membaca dengan identifikasi.
ikuti panduan program ini untuk menghasilkan kode yang jelas dan mengurangi
pemeliharaan saat mengembangkan blok PL/SQL.
Di bawah ini diberikan tabel panduan untuk menulis kode dalam kasus yang besar
ataupun yang kecil untuk membantu anda membedakan kata kunci dari nama objek-objek
yang lain.
Kategori Dalam PL/SQL
Category Chases Konvensi Contoh
SQL statements Uppercase SELECT, INSERT
PL/SQL keywords Uppercase DECLARE, BEGIN, IF
Datatypes Uppercase VARCHAR2,BOOLEAN
Identifiers and parameter Lowercase v_sal,emp_cursor,g_sal,p_empno
Database tables and Lowercase emp,orderdate,deptno
columns

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

Tabel berikutnya memperlihatkan kumpulan prefix/awalan dan sufiks/akhiran untuk


membedaan pengenalan, dari objek – objek database, dan dari objek objek lain yang telah
dinamakan.
Kode Konvensi
Identifiers Naming Conventions Contoh
Variable v_name v_sal
Constant e_name e_company_name
Cursor name_cursor emp_cursor
Exception e_name e_too_many
Table type name_table_type amount_table_type
Table name_table order_total_table
Record Type name_record_type emp_record_type
Record name_record customer_record
SQL*Plus subsitution variabel (diikuti p_name p_sal
juga sebagai parameter subsitution)
SQL*Plus global variabel( juga diikuti g_name g_year_sal
ebagai variabel bind)
7.14. Memberi Spasi Kode

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;

Anda mungkin juga menyukai