Sunday, October 17, 2010

Mengenal PL/SQL (Programming Language/Structured Query Language)


Setelah nyari2 referensi ttg PL/SQL, dan baca2 beberapa artikel, akhirna ane tulis dah di blog ini. Rata2 tulisan yang bagus tentang PL/SQL mua dalam English, ya musti minta bantuan eyang gugel lagi dueh untuk ngartiin.. Artikel tentang PL/SQL yang ane tulis ini masih dalam pembahasan secara umum, coz kalo sampe detail bisa ampe' puluhan halaman... Untuk penggunaan bahasa selanjutnya agak resmi ya,, coz spertinya gimana gitu mbahas kek gini kalo pake bahasa2 planet seperti ne... xixixi

Uke langsung aja.., "apa seh yang dimaksud dengan PL/SQL?"
menurut pak guru Wikipedia kek gini
"PL/SQL (Procedural Language/Structured Query Language) is Oracle Corporation's procedural extension language for SQL and the Oracle relational database. PL/SQL's general syntax resembles that of Ada."
yang kurang lebih artinya, PL/SQL (Procedural Language / Structured Query Language) adalah ekstensi bahasa prosedural punya korporasi oracle untuk SQL dan DBMS relasional oracle.

PL/SQLPL/SQL adalah salah satu dari 3 kunci bahasa pemrograman yang tertanam dalam DBMS Oracle, bersama dengan SQL itu sendiri dan Java. Mendukung variabel, kondisi, loop, exception (pengecualian) dan array juga didukung meski dengan cara yang agak tidak biasa, yang melibatkan penggunaan koleksi PL/SQL.

PL/SQL sesungguhnya merupakan bahasa pemrograman generasi ke-4 yang menawarkan akses SQL yang mulus, integrasi yang ketat dengan Oracle 10g Database Server dan tools lain yang berhubungan. Dengan PL/SQL kita bisa memanipulasi data dan menggunakan pernyataan-pernyataan SQL, serta mengendalikan aliran program dengan konstruksi prosedural, seperti menggunakan pernyataan kondisional IF-THEN dan LOOP. Dalam PL/SQL kita juga bisa mendeklarasikan prosedur-prosedur dan fungsi-fungsi, serta mengatasi kesalahan (error) yang mungkin muncul(dalam bentuk exception handler). Aplikasi-aplikasi yang ditulis menggunakan UI pemrograman Oracle dapat memanggil prosedur tersimpan(stored procedure) yang ditulis menggunakan PL/SQL dan mengirim blok2 kode PL/SQL ke server untuk dieksekusi di sana.

Strukur Umum PL/SQL

Lanjut neh... :D

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.

Uke dah,, sekarang ke contoh penulisan :D

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.

Sekian dulu tulisan ini,, capek dari tadi ngetik teruz.. untuk belajar lebih lanjut bisa langsung ke referensi yang saya gunakan.. :D


References

PL/SQL dari Wikipedia, Ensiklopedia bebas.

Pengenalan PL/SQL slide presentasi staff kampus sebelah

Eksepsi, dari sono juga :D

Langsung ke direktorinya di sini
ne referensi yang dari buku, Adi_nugroho.Menjadi Administrasi Basis Data ORACLE 10g.2008.Bandung:Informatika

Masih kurang? Pengin belajar lebih lanjut, bisa di rohmat.net

Semoga Bermanfaat...
© 2010 by Irfandz Lagi Enjoypiss

1 comment: