Minggu, 23 November 2014


PL/pgSQL adalah procedural language yang loadable (dapat langsung digunakan tanpa restart server) pada sistem database 
Function yang telah anda buat menggunakan PL/pgSQL dapat digunakan sebagaimana function bawaan yang sudah ada di server database PostgreSQL. Misalnya, anda dapat membuat fungsi komputasi kondisional yang kompleks menggunakan PL/pgSQL, kemudian menggunakannya untuk membuat operator atau menggunakannya untuk membuat index di server database PostgrSQL.
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan panjang yang dibungkus menjadi satu dan disimpan dalam database dan kemudian apabila diperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail.
Ada beberapa konsep yang menarik dari fungsi antara lain:
• Bahasa yang dipakai dapat didefenisikan sendiri dengan tersedianya parameter
LANGUAGE, tanpa harus mengkompilasi ulang PostgreSQL.
• Kita dapat membuat dua buah fungsi dengan nama yang sama namun
parametermasukkannya yang berbeda, baik tipe data maupun jumlahnya.
Ada beberapa faktor yang perlu diperhatikan dalam membuat fungsi antara lain:
• Nama Fungsi
• Nomor dari fungsi argument
• Tipe data dari setiap argument
• Tipe dari hasil fungsi
• Fungsi action
• Bahasa yang digunakan oleh fungsi action.
Berikut contoh sederhana pembuatan fungsi SQL untuk perkalian dari tiga inputan :
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)
Struktur PL/pgSQL
Setelah anda berhasil membuat fungsi, mari kita urai satu-per-satu apa yang telah anda buat. PL/pgSQL merupakan bahasa yang dibangun dari blok-blok. Syntax lengkap untuk mendefinisikan sebuah function harus membentuk sebuah blok. Sebuah blok didefinisikan sebagai berikut:
[<<label>>]
[DECLARE
     declaration]BEGIN     statement
END [label];

Triger
Trigger digunakan untuk menyisipkan sebuah fungsi pada saat suatu record di-INSERT, UPDATE dan DELETE. Trigger sangat ideal untuk mengecek atau memodifikasi sebuah data pada kolom sebelum dimasukkan ke dalam database, sehingga sebuah fungsi dapat dipanggil setiap saat secara otomatis ketika sebuah row akan dimodifikasi. Ciri khas dari fungsi yang diperuntukkan untuk trigger adalah menghasilkan output bertipe OPAQUE. Tipe opaque adalah sebuah tipe yang menginformasikan pada database bahwa fungsi tersebut tidak menghasilkan satu dari tipe data yang ditetapkan SQL dan tidak secara langsung dapat digunakan dalam statemen SQL. Language (bahasa) PL/PGSQL dapat digunakan untuk trigger procedure, fungsi untuk trigger ini memiliki beberapa variabel khusus yang terdeklarasi secara otomatis. Variabel tersebut antara lain:
• NEW: Variabel yang berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe RECORD.
• OLD: Variabel yang berisi nilai lama suatu record pada saat UPDATE atau DELETE, juga bertipe RECORD.
Berikut ini beberapa contoh penggunaan fungsi sebagai trigger procedure: [contoh]

PL/SQL pada MYSQL

Syntak untuk membuat procedure dalam MySQL adalah sebagai berikut.
CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body
Keterangan
1. proc_parameter (hanya pada procedure):
    [ IN | OUT | INOUT ] param_name type
·         IN parameter dilewatkan ke dalam procedure tetapi modifikasi nilai dari parameter ini tidak kelihatan setelah procedure tersebut dipanggil.
·         Out parameter merupakan parameter yang dilewatkan dari dalam procedure ke pemanggil procedure tersebut. Nilai inisialisasi saat memanggil adalah null dan hasil parameter akan kelihatan setelah procedure dipanggil.
·         INOUT parameter diinisilaisai oleh pemanggil procedure, kemudian hasil modifikasinya tersebut akan kelihatan setelah procedure tersebut dipanggil.
2. characteristic
    LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
  | COMMENT 'string'
3. routine_body:
Valid SQL procedure statement
Routine body berisi syntax-syntax sql yang valid, seperti insert atau select. Bisa juga berisi compound. Compount diapit oleh begin… end. Syntax dari compound system adalah sebagai berikut.
[begin_label:] BEGIN
    [statement_list]
END [end_label]
Compound ini bisa diisi dengan label. Begin label dan end label harus sama. Di dalam compound juga bisa berisi deklarai variabel, looping atau kontrol program lainnya. Setiap Function harus punya return value untuk mengembalikan nilai yang dihasilkan


Trigger jika diartikan secara bahasa sederhana yaitu suatu pemicu, jika secara bahasa trigger merupakan prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event. Trigger diaktifkan berdasarkan waktu yang diinginkan trigger itu bekerja yang biasa disebut dengan Trigger Timing.

Trigger Timing memiliki 3 timing atau waktu pengaktifan trigger, yaitu:

1. BEFORE : trigger dijalankan sebelum DML event pada tabel
2. AFTER : trigger dijalankan setelah DML event pada tabel
3. INSTEAD OF : trigger dijalankan pada sebuah view.

Sedangkan untuk Trigger itu sendiri memiliki 3 event yaitu:
1. INSERT
2. UPDATE
3. DELETE

Berikut adalah penggunaan dari Event Trigger diatas:
1. Insert
Insert berfungsi untuk memasukkan/menginput data ke dalam tabel, fungsi insert disini jika tabel pertama diinput data yang diinginkan, maka secara auto data tersebut akan masuk kedalam tabel kedua. Penggunaan perintah trigger insert ini adalah sebagai berikut:

Delimiter $$
CREATE TRIGGER auto_insert AFTER INSERT ON mahasiswa FOR EACH ROW
BEGIN
INSERT INTO password(nim,password) VALUES (NEW.nim,md5(NEW.password));
END;
$$ DELIMITER

2. Update
Update pada trigger berfungsi sebagai mana Edit, jika data pada tabel pertama diupdate makan akan secara automatis tabel kedua juga akan terupdate sesuai dengan data yang diupdate. Penggunaan Perintah Update pada Mysql adalah sebagai berikut:

DELIMITER $$
CREATE TRIGGER auto_update BEFORE UPDATE ON mahasiswa_1 FOR EACH ROW
BEGIN
UPDATE mahasiswa_2 SET nama=NEW.nama where nim=NEW.nim;
END;
$$ DELIMITER

3. Delete
Sama seperti perintah trigger sebelumnya, Delete berfungsi menghapus data pada tabel, dan jika tabel pertama di hapus makan pada tabel kedua juga akan secara automatis terhapus data yang di delete. Penggunaan Perintah Delete pada Mysql adalah sebagai berikut:

DELIMITER $$
CREATE TRIGGER auto_delete BEFORE DELETE ON mahasiswa FOR EACH ROW
BEGIN
DELETE FROM mhs2 WHERE nim=OLD.nim;
DELETE FROM transfer WHERE nim=OLD.nim;
END;
$$ DELIMITER

HASIL PRAKTIKUM dan PERBEDAANNYA


1)             Buatlah fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : celcius=5/9 * (nilai Fahrenheit-32) Kemudian jalankan hasilnya dengan menSELECT fungsi tersebut !

Mysql

PostgreSQL
2)             Buatlah fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa. Kemudian jalankan dengan perintah SELECT ! 
MySQL

PostgreSQL

3)             Buatlah fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql !

        Nilai > 100 atau Nilai<0                                 Nilai Salah

        Nilai ≥ 90                                                        Nilai A

        70 ≤ Nilai < 90                                                Nilai B

        60 ≤ Nilai < 70                                                Nilai C

        50 ≤ Nilai < 60                                                Nilai D

        0 ≤ Nilai < 50                                                  Nilai E

Kemudian jalankan hasilnya dengan menSELECT fungsi tersebut !

MySQL

PostgreSQL


4)             Buatlah fungsi menggunakan pl/pgsql untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan. Kemudian jalankan dengan perintah SELECT !


MySQL

PostgreSQL

5)             Tambahkan kolom modifikasi pada tabel mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.


MySQL
Langkah- langkah pengerjaannya




PostgreSQL

KESIMPULAN
Fungsi dibuat agar query yang banyak dapat dibungkus dan dijalankan lebih efektif hingga menigkatkan kinerja database (tidak membutuhkan waktu yang lama dalam mengakses database)
PL/SQL merupakan procedural language yang dapat diisi banyak fungsi
Trigger adalah fungsi yang akan mengubah struktur tabel dalam penggunaan insert update dan delete

Subscribe to RSS Feed Follow me on Twitter!