Landasan Teori
Procedural Langguage
PostgreSQL Procedural Langguage
PostgreSQL memungkinkan untuk mendefinisikan fungsi-fungsi dengan bahasa pemrograman lain selain menggunakan perintah SQL dan bahasa C. Secara umum bahasa pemrograman ini di sebut Procedural Langguage (PL)
Ada empat bahasa (Procedural Langguage) yang tersedia dalam database PostgreSQL :
1.
PL/pgSQL
2.
PL/TCL
3.
PL/Perl
4.
PL/Python
kali ini hanya dibahas PL/pgSQL Procedural Langguage
Install PL/pgSQL Procedural Langguage
Berikut contoh perintah untuk install Procedural Langguage PL/pgSQL
Terlebih dahulu anda harus login sebagai user postgres, kemudian jalankan perintah berikut ini
$createlang plpgsql nama_database
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.
Sedangkan untuk memunculkan fungsi dapat menggunakan query \df. 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);
Stored Procedure/Function SQL
merupakan kumpulan perintah SQL yang diberi nama dan disimpan di server SQL. Stored Procedure biasanya berisi perintah-perintah umum yang berhubungan dengan database, baik perintah DDL (data definition language) maupun DML (data manipulation language).
FUNCTION
Secara default, routine (procedure/function) diasosiasikan dengan database yang sedang aktif. Untuk dapat mengasosiasikan routine secara eksplisit dengan database yang lain, buat routine dengan format: db_name.sp_name.
MySQL mengijinkan beberapa routine berisi statemen DDL, seperti CREATE dan DROP. MySQL juga mengijinkan beberapa stored procedure (tetapi tidak stored function) berisi statemen SQL transaction, seperti COMMIT. Stored function juga berisi beberapa statemen baik yang secara eksplisit atau implisit commit atau rollback.
Sintak :
CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS type [characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'
routine_body:
Valid SQL procedure statement or statements
Keterangan :
•
sp_name: Nama routine yang akan dibuat
•
proc_parameter: Spesifikasi parameter sebagai IN, OUT, atau INOUT valid hanya untuk PROCEDURE. (parameter FUNCTION selalu sebagai parameter IN)
•
returns: Klausa RETURNS dispesifikan hanya untuk suatu FUNCTION. Klausa ini digunakan untuk mengembalikan tipe fungsi, dan routine_body harus berisi suatu statemen nilai RETURN.
•
comment: Klausa COMMENT adalah suatu ekstensi MySQL, dan mungkin digunakan untuk mendeskripsikan stored procedure. Informasi ini ditampilkan dengan statemen SHOW CREATE PROCEDURE dan SHOW CREATE FUNCTION.
contoh
mysql> delimiter //
mysql> create function fcNamaMHS(x char(25)) returns char(40)
-> return concat('Nama : ', x);
-> // Query OK, 0 rows affected (0.00 sec)
mysql> select fcNamaMHS('Sholihun');
Dari contoh diatas terlihat bahwa parameter “x” diperlakukan sebagai IN karena sebagaimana dijelaskan sebelumnya bahwa fungsi hanya bisa dilewatkan dengan
parameter IN. Kemudian untuk pengembalian nilainya, digunakan tipe data dengan kisaran nilai tertentu (dalam hal ini char(40)) dengan diawali pernyataan returns. Pernyataam “concat('Nama : ', x)” merupakan routine_body yang akan menghasilkan gabungan string “Nama :” dengan nilai dari parameter “x” yang didapat ketika fungsi ini dieksekusi. Perintah yang digunakan untuk mengeksekusi fungsi adalah “select fcNamaMHS('Sholihun')”.
TRIGGER
Trigger sama seperti sekumulan perintah Transact-SQL yang secara otomatis dijalankan apabila ada perintahINSERT, DELETE, atau UPDATE yang dijalankan didalam tabel.
Karakteristik Trigger:
- Membuat isi dari kolom yang diambil dari kolom yang lain
- Membuat mekanisme validasi yang mencakup query pada banyak tabel
- Membuat log untuk mendaftarkan penggunaan tabel
- Memodifikasi tabel-tabel lain apabila ada penambahan atau perubahan lain di dalam tabel yang aktif
Batasan Dan Pertimbangan Didalam Menggunakan Trigger :
- Trigger dapat menjalankan perintah yang terkandung didalam badannya atau mengaktifkan prosedur dantrigger lain untuk menjalankan tugas tertentu
- Setiap perintah SET bisa ditentukan didalam trigger. Perintah ini akan tetap aktif selama eksekusi
- Kita tidak dapat membuat trigger untuk view. Tetapi apabila view digunakan, trigger dari tabel dasar biasanya akan diaktifkan
- Perintah truncate table tidak bisa dihentikan oleh trigger
Pernyataan CREATE TRIGGER digunakan untuk membuat trigger, termasuk aksi apa yang dilakukan saat trigger diaktifkan. Trigger berisi program yang dihubungkan dengan suatu tabel atau view yang secara otomatis melakukan suatu aksi
ketika suatu baris di dalam tabel atau view dikenai operasi INSERT, UPDATE atau DELETE.
Sintak :
CREATE [DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
Keterangan :
•
[DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang aktif, sifatnya opsional.
•
trigger_name: Nama trigger.
•
trigger_time: waktu menjalankan trigger. Ini dapat berupa BEFORE atau AFTER.
1.
BEFORE: Membuat trigger diaktifkan sebelum dihubungkan dengan suatu operasi.
2.
AFTER: Membuat trigger diaktifkan setelah dihubungkan dengan suatu operasi.
•
trigger_event: berupa kejadian yang akan dijalankan trigger.
•
trigger_event dapat berupa salah satu dari berikut:
INSERT : trigger diaktifkan ketika sebuah record baru disisipkan ke dalam tabel. Contoh: statemen INSERT, LOAD DATA, dan REPLACE.
UPDATE : trigger diaktifkan ketika sebuah record dimodifikasi. Contoh: statemen UPDATE.
DELETE : trigger diaktifkan ketika sebuah record dihapus. Contoh: statemen DELETE dan REPLACE. Catatan : trigger_event tidak merepresentasikan statemen SQL yang diaktifkan trigger sebagai suatu operasi tabel. Sebagai contoh, trigger BEFORE untuk INSERT akan diaktifkan tidak hanya oleh statemen INSERT tetapi juga statemen LOAD DATA.
•
tbl_name: Nama tabel yang berasosiasi dengan trigger.
•
trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan ketika trigger aktif.
HASIL PRAKTIKUM
setelah memepelajari tentang fungsi dan trigger kali ini hasil praktikum yang telah dilakukan.
1. Buatlah fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : celcius= (5*(nilai Fahrenheit-32))/9!
Kemudian jalankan hasilnya dengan menSELECT fungsi tersebut !
2. Buatlah fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa. Kemudian jalankan dengan perintah SELECT !
3. Buatlah fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql !
Nilai> 100 atau Nilai<0
Nilai Salah
Nilai ≥ 90
Nilai
A
70 ≤ Nilai
Nilai<90
B
60 ≤ Nilai
Nilai<70
C
50 ≤ Nilai
Nilai<60
D
0 ≤ Nilai
Nilai<50
E
Kemudian jalankan hasilnya dengan menSELECT fungsi tersebut
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.
PENUTUP
Perbedaan PostgreSQL dan MySQL
•
PostgreSQL :
1.
Harus menuliskan tipe bahasa yang dipakai seperti pl/pgsql, pl/tcl,pl/perl atau pl/phyton
2.
Pada query if dan else if menggunakan select into variable(values)
3.
Tidak perlu pemberian nilai pada saat pendeklarasian tipe data char atau varchar
•
MySQL
1.
Tidak perlu menulis tipe bahasa yang dipakai karena akan otomatis mengeksekusi perintah
2.
Perlunya pemberian ukuran pada tipe data char atau varchar karena jika tidak di beri akan error
3.
Memakai return concat yaitu nilai kembalian pada akhir query
4.
Pada query if dan else if menggunakan then return concat(values)
Kesimpulan
Pada praktikum kali ini terlihat banyak sekali perbedaan pada query antara postgresql dan mysql, mulai dari trigger, fungsi yang terlihat sangat berbeda walaupun sebenarnya serupa. Owh iya saran saja dari saya, ketika ada waktu luang untuk berkarya maka lakukan hal yang bermanfaat karena bisa saja “later” akan menjadi “never”
Oke sekian laporan hasil praktikum ini semoga bermanfaat kepada para pembaca sekalian.