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 ?
- Bahasa yang dipakai itu bisa didefinisikan sendiri dengan adanya LANGUAGE, tanpa harus mengkompilasi ulang PostgreSQL
- 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
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
- 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- PostgreSQL
Pada sintaks pembuatan fungsi tidak memerlukan awalan kata "delimiter"
MySQL
Pada sintaks pembuatan fungsi harus diawali dengan kata "delimiter" - 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 ';' - 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.
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