PostgreSQL bukan hanya sekedar sebuah storage system yang mana cara untuk menggunakan hanyalah dengan mengeksekusi SQL statement. Sebenarnya itu hanyalah bagian kecil dari fiturnya.
Di seri kali ini kita akan membahas beberapa aspek pemrograman PostgreSQL server, bukan secara menyeluruh karena fitur yang tersedia sangat banyak dan saya hanya akan membuat beberapa penggunaan fitur yang umum ( bisa dikatakan begitu :D ). Saya akan membuat beberapa part utk seri ini, sama seperti seri belajar MySQL sebelumnya. Tentunya disini saya tidak menjelaskan penggunaan SQL secara umum tetapi lebih kepada fitur-fitur ataupun penggunaan PostgreSQL itu sendiri.
Developer dapat membuat sebuah program dengan beragam pilihan bahasa pemrograman yang tersedia. Ketika membuat sebuah aplikasi, biasanya logic pengumpulan ataupun kelola database aplikasi langsung pada sisi aplikasi, tentunya cara ini sudah umum digunakan dalam desain sebuah aplikasi. Akan tetapi sebenarnya kita bisa melakukan pemrograman didalam database server.
Mari kita lihat contoh sederhana. Berikut ini kita sediakan tabel beserta contoh datanya sebagai berikut:
CREATE TABLE tb_tabungan(pemilik text, saldo numeric);
INSERT INTO tb_tabungan VALUES ('John', 500000);
INSERT INTO tb_tabungan VALUES ('Jenny', 2000);
INSERT INTO tb_tabungan VALUES ('John', 500000);
INSERT INTO tb_tabungan VALUES ('Jenny', 2000);
Umumnya, untuk berinteraksi dengan data tersebut diatas adalah dengan menggunakan SQL query. Misalkan kita ingin memindahkan dana senilai 20.000 dari akun John ke akun Jenny, dapat dilakukan dengan query berikut:
Kita coba buat sebuah fungsi sederhana dengan menggunakan PL/pgSQL, bisa copas jika tidak mau repot :D
Kita cek terlebih dahulu data yang kita punya:
Kemudian kita coba utk jenis kondisi yang tersedia dengan memberikan nama penerima, nama pembayar yang tidak tersedia dan saldo yang tidak cukup, berikut ini contohnya:
- Nama pembayar yg tidak tersedia
Itulah contoh sederhana dari seri pembuka pemrograman PostgreSQL, cukup banyak memang dan saya berharap dengan ini kita bisa lanjutkan ke part berikutnya. Jangan lupa silahkan berikan komentar jika ada yang ingin ditanyakan ataupun koreksi yang harus saya lakukan.
UPDATE tb_tabungan SET saldo = saldo - 20000 WHERE pemilik = 'John';
UPDATE tb_tabungan SET saldo = saldo + 20000 WHERE pemilik = 'Jenny';
Dari contoh diatas kita sudah bisa mendapatkan hasil yang diinginkan. Namun misalkan jika John tidak memiliki cukup saldo pada rekeningnya, maka seharusnya tidak ada transaksi yang akan terjadi. Utk mengatasi hal semacam ini kita dapat lakukan di sisi database server dengan membuat sebuah fungsi yg biasa dikenal dengan User-defined function (UDF). PostgreSQL sudah memiliki bahasa pemrograman sendiri yaitu PL/pgSQL. PL adalah singkatan dari Programming Language dan pgSQL adalah singkatan dari PostgreSQL, ya itulah PL/pgSQL.UPDATE tb_tabungan SET saldo = saldo + 20000 WHERE pemilik = 'Jenny';
Kita coba buat sebuah fungsi sederhana dengan menggunakan PL/pgSQL, bisa copas jika tidak mau repot :D
CREATE OR REPLACE FUNCTION transfer(
i_pembayar text,
i_penerima text,
i_saldo numeric(15,2)
) RETURNS text AS
$$
DECLARE
saldo_pembayar numeric;
BEGIN
SELECT saldo INTO saldo_pembayar FROM tb_tabungan
WHERE
pemilik = i_pembayar FOR UPDATE;
IF NOT FOUND THEN
RETURN 'Nama pembayar tidak ditemukan';
END IF;
IF saldo_pembayar < i_saldo THEN
RETURN 'Dana dalam saldo tidak mencukupi';
END IF;
UPDATE tb_tabungan SET saldo = saldo + i_saldo
WHERE
pemilik = i_penerima;
IF NOT FOUND THEN
RETURN 'Nama penerima tidak ditemukan';
END IF;
UPDATE tb_tabungan SET saldo = saldo - i_saldo
WHERE
pemilik = i_pembayar;
RETURN 'Transfer berhasil';
END;
$$
LANGUAGE plpgsql;
Karena dasarnya bahasa inggris, tentunya akan mudah dipahami maksud dari fungsi diatas yang hanya berupa logic kondisi. Oh ya, perlu diperhatikan bahwa tanda ( ; ) disini masih sangat berpengaruh jadi jangan sampai lupa karena akan terjadi error.i_pembayar text,
i_penerima text,
i_saldo numeric(15,2)
) RETURNS text AS
$$
DECLARE
saldo_pembayar numeric;
BEGIN
SELECT saldo INTO saldo_pembayar FROM tb_tabungan
WHERE
pemilik = i_pembayar FOR UPDATE;
IF NOT FOUND THEN
RETURN 'Nama pembayar tidak ditemukan';
END IF;
IF saldo_pembayar < i_saldo THEN
RETURN 'Dana dalam saldo tidak mencukupi';
END IF;
UPDATE tb_tabungan SET saldo = saldo + i_saldo
WHERE
pemilik = i_penerima;
IF NOT FOUND THEN
RETURN 'Nama penerima tidak ditemukan';
END IF;
UPDATE tb_tabungan SET saldo = saldo - i_saldo
WHERE
pemilik = i_pembayar;
RETURN 'Transfer berhasil';
END;
$$
LANGUAGE plpgsql;
Kita cek terlebih dahulu data yang kita punya:
SELECT * FROM tb_tabungan;
pemilik | saldo
---------+---------
John | 500000.00
Jenny | 20000.00
(2 rows)
Dalam fungsi transfer yang kita buat, terdapat 3 argument yaitu berupa input nama pembayar, input nama penerima, dan nominal saldo, lalu cara menggunakannya adalah sebagai berikut:pemilik | saldo
---------+---------
John | 500000.00
Jenny | 20000.00
(2 rows)
SELECT * FROM transfer('John', 'Jenny', 20000.00);
transfer
----------
Transfer berhasil
(1 row)
Lalu cek kembali datanya, tentunya akan berubah saldo milik si Jenny.transfer
----------
Transfer berhasil
(1 row)
Kemudian kita coba utk jenis kondisi yang tersedia dengan memberikan nama penerima, nama pembayar yang tidak tersedia dan saldo yang tidak cukup, berikut ini contohnya:
- Nama pembayar yg tidak tersedia
SELECT * FROM transfer('Momo', 'Jenny', 20000.00);
transfer
----------
Nama pembayar tidak ditemukan
(1 row)
- Nama penerima yg tidak tersediatransfer
----------
Nama pembayar tidak ditemukan
(1 row)
SELECT * FROM transfer('John', 'Jack', 20000.00);
transfer
----------
Nama penerima tidak ditemukan
(1 row)
- Saldo pembayar yg tidak cukuptransfer
----------
Nama penerima tidak ditemukan
(1 row)
SELECT * FROM transfer('John', 'Jenny', 1500000.00);
transfer
----------
Dana dalam saldo tidak mencukupi
(1 row)
Sangat bagus bukan? tentunya dengan adanya fungsi ini kita hanya perlu memanggilnya dalam aplikasi yang kita buat daripada membuat logic yang sama didalam aplikasi yang berupa SQL statement terlebih jika digunakan pada beberapa modul akan lebih baik menggunakan cara seperti contoh diatas, ya meskipun tidak salah ataupun bukan keharusan hanya saja cara seperti ini sebenarnya bisa dilakukan dan mungkin bisa saya bilang lebih baik dilakukan agar kode didalam aplikasi yang kita buat setidaknya tidak begitu banyak hanya karena SQL statement yg kita buat :Dtransfer
----------
Dana dalam saldo tidak mencukupi
(1 row)
Itulah contoh sederhana dari seri pembuka pemrograman PostgreSQL, cukup banyak memang dan saya berharap dengan ini kita bisa lanjutkan ke part berikutnya. Jangan lupa silahkan berikan komentar jika ada yang ingin ditanyakan ataupun koreksi yang harus saya lakukan.
0 comments:
Post a Comment