PL/SQL Tips


1. Procedure atau package?
Apa yg membedakan antara procedure dan package?
Keduanya sama-sama memiliki kemampuan untuk membuat child procedure/function didalamnya.
Procedure
1. Memiliki kemampuan untuk mebuat child procedure/function didalamnya.
2. Nilai kembalian seperti pada function juga dapat dilakukan oleh procedure.
3. Child Procedure dan variabel global hanya dapat digunakan di procedure itu saja, tidak dapat digunakan oleh procedure/function lain.

Package
1. Paket dapat berisi procedure atau function seperti halnya pada procedure.
2. Procedure, function dan global varable yang ada dalam paket dapat dipanggil olehi prc/fungsi lain, sehingga memungkinkan penggabungan antara paket dengan procedure biasa.

Ada beberapa hal yang harus diperhatikan dari penggunaan child procedure/
function di procedure biasa dan procedure/function dalam paket. Jika pada saat eksekusi procedure/function, interpreter Pl/Sql menemukan procedure lain yang dipanggil maka dia akan mencari ke procedure/function biasa terlebih dulu. Apabila tidak ditemukan baru dicari dalam lokal procedure/paket tsb. Artinya, hati-hati terhadap penggunaan nama procedure yang sama, karena bisa-bisa procedure lain yg dipanggil. Lalu?
Untuk penggunaan procedure dalam procedure biasa gunakan nama lain yang unique, sehingga tidak terjadi bentrok. Jika paket, selalu tambahkan [nama paket].nama procedure/function setiap kali memanggil procedure/function.

2. Cursor atau Select field into variabel
Memang penggunaan Select field into variabel kadang lebih disukai karena lebih simple dalam penulisan code. Selain itu dapat ditambahkan exception untuk pengecekan jika tidak ditemukan data.
Namun dalam online transaction dan sebuah looping dengan jumlah record yang cukup banyak (~ >200 rec) penggunaan select into menjadi tidak effective karena proses yang dilakukan oleh select into adalah membuka cursor tanpa menutupnya, sedangkan di Oracle memiliki batasan cursor yang di open, sehingga apabila kondisi ini terjadi maka akan muncul error

maximum_cursor_exceeded

dan kemudian oracle akan mereset jumlah cursor yg di open ke nol (0).

4. Looping menggunakan for atau open cursor?
Beberapa orang lebih menyukai untuk melakukan loping dengan for tetapi tidak jarang pula orang melakukan looping dengan open cursor.
Pada dasarnya menggunakan for lebih simple karena tidak perlu mendeklarasikan fetch record ke variable, selain itu – dengan statement for – cursor yang dibuka akan langsung di close pada akhir loop.
Loop menggunakan explicit cursor disatu sisi lebih merepotkan karena harus menuliskan kode yang cukup panjang. Belum lagi jika sisi fetch terbalik dengan statement exit. Hasilnya jumlah record yang dilaporkan akan kelebihan 1 record atau lupa menambahkan statement exit when sql%not found. Kondisi tsb akan membuat looping menjadi tidak terhingga dan menyebabkan database menjadi error/down. Selain hal yang harus diperhatikan diatas, tentunya ada kelebihan dari penggunaan loop dengan explicit cursor. Beberapa diantaranya adalah penulisa query dapat dilakukan menggunakan string yang diassign kedalam variabel, sehingga memudahkan untuk dilakukan manipulasi.

3. Reset nilai variabel, perlukah?
Dalam sebuah looping/perulangan yang didalamnya terdapat proses pengambilan data melalui sebuah cursor atau menggunakan function, maka sebelum data diassign kedalam variabel. Variabel penampung harus direset ke default value. Bisa bernilai null, noll (0) atau nilai default lainnya.

4. Hindari select dengan where clause menggunakan function.jika te paksa gunakan index function

5.  Hapus variabel yang tidak digunakan akan menghemat memori.

2 thoughts on “PL/SQL Tips

  1. 1. Bagaimana menggunakan cursor sebagai client side?
    2. Jika kita mengembangkan database dengan menyediakan procedure/package bagi beberapa pihak yang mengembangkan aplikasinya sendiri, bagaimana cara terbaik agar resource yang dipakai untuk cursor dapat dibatasi?

  2. Bagaimana membuat SELECT statement berdasarkan kondisi tertentu pada sebuah fungsi. Contoh :
    IF kode=0 THEN
    SELECT …….
    ELSE IF kode=1 THEN
    SELECT ….
    END IF
    RETURN ……

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s