Senin, 17 November 2014

Pemahaman dan Penggunaan Fungsi serta PL/PGSQL


 Fungsi dan PL/PGSQL

Dalam database terdapat fungsi-fungsinya, fungsi SQL di sini itu adalah sebuah kumpulan query, biasanya query yang detail dan panjang dan djadikan satu, abis itu disimpen ke database, nah kalo waktu mau kita pakai, kita cuma langsung ngakses nggak perlu ngetik lagi. Ada juga konsep yang menarik dari si FUNGSI, apa itu ?
  1. Bahasa yang dipakai itu bisa didefinisikan sendiri dengan adanya LANGUAGE, tanpa harus      mengkompilasi ulang PostgreSQL 
  2. Kita bisa buat dua fungsi dengan nama yang sama, tapi parameter dan tipe data maupun jumlahnya berbeda.

Ada beberapa faktor yang patut diperhatin juga, guys :
1. Nama Fungsi
2. Nomor dari fungsi argument
3. Tipe data dari setiap argument
4. Tipe dari hasil fungsi
5. Fungsi action
6. Bahasa yang dipakai sama fungsi action

Langsung aje kita lihat contoh pembuatan fungsi SQL untuk operasi penjumlahan dan perkalian dari tiga variable di bawah ini :

db_personal=> CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
db_personal-> RETURNS FLOAT
db_personal-> AS ‘SELECT ($1 + $2) * $3;’
db_personal-> LANGUAGE ’sql’;
CREATE

db_personal=> SELECT perkalian (10,10,10);
perkalian
———–
200
(1 row)
====================================
Fungsi PL/PGSQL

PL/PGSQL ini bahasa lainnya untuk buat fungsi, biasanya dipakai sama bahasa yang lebih kompleks. 

Keuntungannya :
1. Kinerja jadi meningkat, karena mengurangi pengiriman kode dari klien ke server
2. Keamanannya meningkat, karena pada pengaksesan data tertentu ditangani dalam server
3. Konsistensi data jadi meningkat juga waktu sejumlah aplikasi itu manggil prosedur yang sama

Kelemahannya :
Server bakalan lebih terbebani karena banyak proses yang harus ditangani (kaya manusia aja yang serting ngrasa terbebani => kuli kali).

Struktur pembuatan fungsi dalam pl/pgsql :
 
1. Pembuatan fungsi : 

   CREATE [OR REPLACE] FUNCTION nama_fungsi ( argtype , ... 
   RETURNS tipe_data 
   AS "definisi" 
   LANGUAGE "plpgsql‟;
2. Pembuatan definisi : 

   DECLARE nama_variable tipe_data /* deklarasi variabel, type */ 
   BEGIN
 /* prosedural dan SQL masuk disini seperti select, update dan sebagainya*/ Return nama_variable      
/* blok ini yang wajib */ 
   END;

Menghapus fungsi : 
DROP FUNCTION nama_fungsi(paramater, parameter, parameter ... ); Contoh : DROP FUNCTION pembagian(text);


Ada beberapa faktor yang musti diperhatiin pada bahasa ini, yaitu :

DECLARE 
Mendeklarasikan variable yang dipakai dalam fungsi

SELECT INTO
Sebuah form spesial dari select yang memperbolehkan hasil query menempati ke dalam variable.

RETURN
Exit dan merupakan hasil value dari fungsi.

Berikut ini implementasi dari fungsi PL/PGSQL :

db_personal=> CREATE FUNCTION nama_kota (text)
db_personal-> RETURNS text
db_personal-> AS ‘DECLARE hasil TEXT;
db_personal’> BEGIN
db_personal’> SELECT INTO hasil CAST(kota AS TEXT)
db_personal’> FROM identitas
db_personal’> WHERE state = $1;
db_personal’> RETURN hasil;
db_personal’> END;’
db_personal-> LANGUAGE ‘plpgsql’;
CREATE

db_personal=> SELECT nama_kota (‘YK’);
nama_kota
—————–
Yogya
(1 row)
db_personal=> SELECT nama_kota (‘MG’);
nama_kota
——————–
Mangga Dua
         (1 row)
=========================================

TRIGGER

Trigger biasanya digunakan untuk menyisipkan fungsi waktu baris di-INSERT, UPDATE, maupun DELETE. Trigger juga bisa untuk mengecek atau memodifikasi data pada kolom sebelum dimasukkan ke database, sehingga fungsi dapat dipanggil setiap saat (kaya Re**** "setia setiap saat.. :D ga boleh sebut merk..#Bahaya). Yang paling membedakan dari trigger ini yaitu menghasilkan output bertipe OPAQUE bukan Opak sama Kue loh. Tipe OPAQUE ini tipe yang menginformasikan database kalau fungsi tersebut tidak menghasilkan satu dari tipe data yang udah ditetapkan sama SQL dan tidak bisa secara langsung dipakai dalam statement SQL.

Trigger juga memiliki variable khusus yang berdeklarasi secara otomatis, yaitu :
  • NEW : berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe record
  • OLD  : berisi nilai lama suatu record pada saat INSERT atau UPDATE, bertipe record
Contohnya :
Memastikan isi field atau kolom nama pada table anggota memakai huruf besar

Pertama-tama, kita buat fungsinya dulu :
db_personal=> CREATE FUNCTION tes_trigger()
db_personal-> RETURNS opaque
db_personal-> AS 'BEGIN
db_personal'> NEW.nama := UPPER(NEW.nama);

db_personal'> RETURN NEW;
db_personal'> END;'
db_personal-> LANGUAGE 'plpgsql';

CREATE


Lalu, dilanjutkan dengan pembuatan trigger yang berfungsi untuk memanggil fungsi secara otomatis ketika kita melakukan INSERT ataupun UPDATE pada tabel anggota.

db_personal=> CREATE TRIGGER tes1_trigger
db_personal-> BEFORE INSERT

db_personal-> ON anggota
db_personal-> FOR EACH ROW
db_personal-> EXECUTE PROCEDURE tes_trigger();

CREATE


kita coba check INSERT beberapa data ke dalam tabel anggota:

db_personal=> INSERT INTO anggota (id, nama)
db_personal-> VALUES (20, 'iqbal');

INSERT 70831 1

db_personal=> INSERT INTO anggota

db_personal-> VALUES (22, 'sasa');

INSERT 70832 1

Tampilkan isi dari tabel anggota, hasilnya pada tabel di bawah ini. Jadi setiap data yang kita INSERT walaupun dalam penulisannya kita pakai huruf kecil tapi secara otomatis trigger akan memanggil fungsi yang bertugas untuk mengganti setiap data yang masuk agar hasilnya nanti selalu menjadi huruf besar, begitu :

db_personal=> SELECT * FROM anggota;
id | nama

--------+-------------
20 | IQBAL

22| SASA

(2 rows)


*) HASIL PRAKTIKUM
   
    POSTGRESQL

  1. Membuat fungsi konversi suhu dari fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : ((nilai-32)/1,8). di sini kita mengisi nilai = 32.  



     2. Membuat fungsi mencari alamat di table mahasiswa lewat nama mahasiswa


     3. Membuat fungsi untuk menghitung nilai


     4. Membuat fungsi untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan
    
     5.  Menambahkan kolom modifikasi pada tabel mahasiswa. Dimana ada insert atau update maka tanggal pada kolom modifikasi akan menunjukan tanggal perubahan tsb dilakukan




      MySQL

        1.  Membuat fungsi konversi suhu dari fahrenheit ke derajat celcius dengan rumus konversi         sebagai berikut : ((nilai-32)/1,8). di sini kita mengisi nilai = 32.   




        2.  Membuat fungsi mencari alamat di table mahasiswa lewat nama mahasiswa

            3.  Membuat fungsi untuk menghitung nilai
                
                 


        4.   Membuat fungsi untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan


        5.   Menambahkan kolom modifikasi pada tabel mahasiswa. Dimana ada insert atau update maka tanggal pada kolom modifikasi akan menunjukan tanggal perubahan tsb dilakukan.

              Pertama, kita buat kolom tambahan di table mahasiswa nama nya "modifikasi"

abis itu, insert kolom di table mahasiswa
 
      
 kita select table mahasiswa nya buat nge-check kolom modifikasinya


ini yang update nya. aku nyoba ganti alamat mahasiswa yang bernama "vani", yang awalnya alamatnya "cimahi" diupdate jadi "bogor". :)

      Evaluasi Perbandingan PostgreSQL dan MySQL


  1. PostgreSQL
    Pada sintaks pembuatan fungsi tidak memerlukan awalan kata "delimiter"
    MySQL
    Pada sintaks pembuatan fungsi harus diawali dengan kata "delimiter"
  2. PostgreSQL
    Fungsi deretan perintah selalu diakhiri dengan karakter ';' untuk setiap kalimat perintahnya
    MySQL
    Fungsi deretan perintah diakhiri sesuai dengan perintah interaktif pada delimiternya, jika delimiter // ,maka kalimat perintahnya diakhiri dengan tanda '//' ,terkecuali delimiter sudah dikembalikan dengan perintah delimiter ;, maka kalimat perintah diakhiri dengan tanda ';'
  3. PostgreSQL
    Pada parameter di sintaks fungsi yang diapit oleh tanda kurung berisikan type data, dan tidak harus ditambahkan dengan nilai dari tipe data tersebut
    create function perkalian (float,float)
    MySQL
    Pada parameter di sintaks fungsi yang diapit oleh tanda kurung berisikan type data harus ditambahkan dengan nilai dari tipe data tersebut
    create function perkalian (varchar (20))


    *) KESIMPULAN
    Fungsi sql itu sebuah kumpulan query, yang biasanya mendapati query yang panjang, lalu dibungkus jadi satu dan disimpan dalam database. Kalau lagi dibutuhin, tinggal diakses tanpa ngetik query lagi. Sedangkan PL/PGSQL itu bahasa yang dipakai untuk menangani fungsi yang lebih kompleks. Lain halnya dengan Trigger, trigger itu digunakan untuk menyisipkan sebuah fungsi pada record yang di insert, update maupun delete. Ini juga dapat mengecheck atau memodifikasi data pada kolom sebelum dimasukkan ke database, jadi fungsi itu bisa dipanggil otomatis. Dan dalam hal ini, sintak atau query dari masing-masing aplikasi (dibaca:Postgresql dan mysql) berbeda-beda.

    *)   KRITIK DAN SARAN

    Dalam praktikum kali ini yang berjudul Fungsi, PL/PGSQL, dan Trigger terdapat query yang berbeda-beda pada aplikasi postgresql dan mysql. Sehingga, dibutuhkan referensi dalam tiap query agar dapat mengetahui penyelesaiannya.

    *)   MANFAAT
    Manfaat yang didapat dari pembelajaran praktikum ini, yaitu para pembaca mampu memahami dan mengaplikasikan fungsi serta dasar penggunaan pada pl/pgsql dan trigger dalam database postgresql, serta mysql.


          *)     DAFTAR PUSTAKA

          Musthofa, aziz.2004.Modul Praktikum Desain Basis Data.Malang.

          http://www.postgresql.org/docs/8.2/static/plpgsql.html
          http://informatikanote.blogspot.com/2014/01/fungsi-plpgsql-dan-trigger.html

0 komentar:

Posting Komentar