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.
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
Mysql
PostgreSQL
2) Buatlah fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa. Kemudian jalankan dengan perintah SELECT !
MySQL
PostgreSQL
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
4) Buatlah fungsi menggunakan pl/pgsql untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan. Kemudian jalankan dengan perintah SELECT !
5) Tambahkan kolom modifikasi pada tabel mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.
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
KRITIK DAN SARAN
Tolong di kritik ya kk :-D semoga jawaban in benar dan jika salah tolong di benarkan ya :D
DAFTAR PUSTAKA
Tolong di kritik ya kk :-D semoga jawaban in benar dan jika salah tolong di benarkan ya :D
DAFTAR PUSTAKA















