Strukur Umum PL/SQL
PL/SQL bekerja server-side yang mana PL/SQL ini sesungguhnya akan dijalankan di server basisdata. Truz apa implikasinya? Karena berjalan server-side, kode-kode PL/SQL ini sangat efisien untuk operasi-operasi yang melibatkan data dalam volume besar serta meminimalisir lalu lintas di jaringan komputer pada aplikasi-aplikasi client-server. PL/SQL sangat portable dan merupakan bahasa transaksi berkinerja tinggi serta merupakan bahasa yang menawarkan keunggulan-keunggulan seperti berikut:
- Dukungan penuh terhadap SQL. PL/SQL memungkinkan kita untuk menggunakan semua sintaks manipulasi data SQL, kendali cursor, dan perintah-perintah pengendali transaksi, sehingga kita dapat memanipulasi basis data oracle secara fleksibel dan aman. PL/SQL mendukung penuh seluruh tipe data SQL seperti yang didefinisikan oleh Oracle 10g, mengurangi konversi yang mungkin akan terjadi antara aplikasi dan basis data. Digabungkan dengan akses langsung yang dilakukan oleh SQL, tipe data yang terbagi mengintegrasikan PL/SQL dengan kamus data(data dictionary) milik basis data oracle 10g. Atribut-atribut %TYPE dan %ROWTYPE memungkinkan kode-kode kita beradaptasi dengan perubahan definisi tabel. Sebagai contoh, atribut %TYPE mendeklarasikan peubah (variable)berbasis pada jenis kolom basis data. Jika type kolom berubah, peubah kita akan menggunakan type yang benar saat aplikasi dijalankan (run-time environment).
- Kinerja yang lebih baik. Jika aplikasi kita cenderung bekerja dengan volume data yang besar, kita dapat menggunakan blok PL/SQL untuk mengelompokkan pernyataan-pernyataan SQL sebelum mengirimnya ke server basis data Oracle 10g untuk dieksekusi. Hal ini akan secara dramatis mengurangi “biaya” komunikasi antar-aplikasi kita dengan sistem basis data Oracle 10g. Prosedur-prosedur tersimpan PL/SQL akan dikompilasi sekali saja dan disimpan dalam bentuk yang langsung dapat dieksekusi, sehingga pemanggilan prosedur dapat berlangsung dengan cepat dan efisien.
- Produktifitas yang lebih tinggi. PL/SQL menambahkan kemampuan-kemampuan prosedural yang bersifat sama dalam semua lingkungan. Saat kita mahir menggunakan PL/SQL dengan salah satu tools yang dimiliki oleh Oracle 10g, kita dapat mentransfer pemahaman kita pada tools yang lain, sehingga sangat meningkatkan produktifitas. Sebagai contoh, script yang ditulis menggunakan suatu tools dapat digunakan oleh tools yang lain.
- Skalabilitas. Prosedur-prosedur tersimpan yang ditulis menggunakan PL/SQL meningkatkan skalabilitas dengan cara memusatkan pemrosesan aplikasi server-side(di sisi server). Fasilitas memori terbagi (shared memory) dari server terbagi (shared server) memungkinkan basis data Oracle 10g mendukung ribuan pengguna.
- Kemudahan dipelihara. Sekali divalidasi, prosedur tersimpan (stored procedure) yang ditulis menggunakan bahasa PL/SQL dapat digunakan oleh sejumlah aplikasi. Jika definisinya berubah, hanya prosedur tersimpa yang bersangkutan yang dipengaruhi, bukannya aplikasi-aplikasi yang memanggilnya. Hal ini menyederhanakan pemeliharaan. Selain itu, memelihara stored procedure di server lebih mudah dibandingkan memelihara beberapa salinannya di banyak komputer client.Pada dasarnya ada 3 jenis objek PL/SQL yang paling dasar, yaitu stored procedure, dan stored function serta trigger, dimana ketiganya merupakan bagian dari beberapa objek PL/SQL lainnya yang dapat disebutkan di bawah ini.
- Packages, adalah kumpulan prosedur dan fungsi yang secara logika berhubungan. Pada package ini ada yang dinamakan sebagai spec (spesifikasi), yang merupakan antarmuka ke aplikasi pengguna. Spec ini mendeklarasikan peubah-peubah (variables), jenis-jenisnya, konstanta2, exception (pengecualian), serta cursor, yang tersedia untuk dimanfaatkan oleh pengguna.
- Package Body, merupakan tubuh program yang secara penuh mendefinisikan cursor serta sub program, serta juga digunakan untuk mengimplementasikan spec. Tubuh program ini merupakan rincian implementasi deklarasi dan pada umumnya tersembunyi dari aplikasi yang dibuat opeh pengguna.
- Type Body, merupakan kumpulan metode-metode (prosedur-prosedur dan fungsi-fungsi) yang behubungan dengan tipe data yang didefinisikan pengguna.
- Procedure, merupakan blok PL/SQL yang melaksanakan aksi tertentu yang sifatnya spesifik.
- Functions, merupakan blok PL/SQL yang mengembalikan suatu nilai tunggal menggunakan perintah RETURN.
- Trigger, merupakan nlok PL/SQL yang tereksekusi saat even tertentu terjadi di basis data. Even-even ini mungkin berbasis pada tabel seperti saat baris, tertentu ditambahkan ke suatu tabel. Trigger dapat juga merupakan even-even basis data, seperti misalnya even yang terjadi saat pengguna login ke basis data.
contoh penulisan
Struktur Blok PL/SQL
Terdapat tiga bagian:
- Bagian pendeklarasian tipe data (opsional)
- Bagian penulisan perintah
- Bagian eksepsi (opsional)
Bentuk umum PL/SQL
DECLARE
variabel tipe_data;
konstanta CONSTANT tipe_data := nilai;
...
BEGIN
statement_1;
statement_2;
...
EXCEPTION
WHEN nama_eksepsi THEN statement_untuk_mengatasi_error;
...
END;
Contoh paling sederhana
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Belajar Oracle’);
END;
Catatan: Untuk melihat hasil, setting terlebih dahulu variabel sistem SERVEROUTPUT dengan menuliskan : SET SERVEROUTPUT ON
Contoh dengan eksepsi
SET SERVEROUTPUT ON
DECLARE
X Integer;
BEGIN
X := ‘Belajar Oracle’;
DBMS_OUTPUT.PUT_LINE( TO_CHAR(X) );
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE (‘Kesalahan pada pengisisan
nilai’);
END;
/
Contoh Studi Kasus
Prosedur debit_account di bawah ini memiliki kegunaan untuk menarik uang sejumlah tertentu dari rekening bank. Prosedur ini menerima parameter formal nomor rekening(acc_id) dan jumlah penarikan (debit_amount), kemudian menghitung saldo (balance) yang baru. Jika saldo (new_balance) lebih kecil dari nol, prosedur akan melompat ke rutin kesalahan (EXCEPTION) ; Jika tidak, ia akan dengan segera meperbarui rekening bank.
PROCEDURE debit_account (acct_id INTEGER, debit_amount REAL) IS
–- BAGIAN DEKLARASI
old_balance REAL;
new_balance REAL;
overdrawn EXCEPTION;
–- PROGRAM PL/SQL
BEGIN
SELECT bal INTO old_balance FROM accts
WHERE acct_no = acct_id;
new_balance:= old_balance – debit_amount;
IF new_balance < 0 THEN
RAISE overdrawn;
ELSE
UPDATE accts SET bal = new_balance
WHERE acct_no = acct_id;
END IF;
COMMIT;
EXCEPTION
WHEN overdrawn THEN
- - KODE UNTUK MENANGANI KESALAHAN DILETAKKAN DI SINI
END debit_account;
/
Bagian deklarasi mendeklarasikan peubah-peubah PL/SQL, exception, serta cursor. Bagian yang dapat dieksekusi memuat kode PL/SQL dan pernyataan-pernyataan SQL, dan dapat mengandung blok-blok bersarang (nested blocks). Penanganan eksepsi (exception handler) memuat kode-kode yang akan dipanggil saat exception (mirip dengan error) terjadi, entah menggunakan kode eksepsi yang telah terdefinisi sebelumnya (seperti NO_DATA_FOUND atau ZERO_DIVIDE) atau kode eksepsi yang kelak kita definisikan sendiri.
Referensi : http://blog.uin-malang.ac.id/irfandz/2010/10/17/mengenal-pl-sql/
Referensi : http://blog.uin-malang.ac.id/irfandz/2010/10/17/mengenal-pl-sql/
0 komentar:
Posting Komentar