09 Agustus 2013

Membuat Fungsi Pada PostgreSQL

       Di aplikasi basis data PostgreSQL banyak tersedia fungsi – fungsi standar yang dapat digunakan tapi mungkin juga belum tersedia fungsi yang dibutuhkan, oleh karena itu bisa dibuat fungsi baru sesuai dengan kebutuhan. Keuntungan membuat fungsi di database yaitu membuat kinerja aplikasi lebih baik, karena data yang diolah tidak perlu bolak – balik antara basis data dan server aplikasi. Dan jika aplikasi diganti misalkan dari PHP ke Java, pastinya bisa sangat menghemat waktu dan tenaga karena fungsi yang dibuat ada di sisi aplikasi basis data.


Contoh fungsi untuk membuat id berdasarkan tanggal :

-- Input 1 = pencacah nilai bertipe integer, Input 2 = nama tabel yang akan digunakan nilai maksimalnya
CREATE OR REPLACE FUNCTION getid(integer, character varying)
-- Mengembalikan nilai dengan tipe character varying
  RETURNS character varying AS
$BODY$
-- Deklarasi Variabel
DECLARE
-- bulanTahun diisi dengan bulan dan tahun sekarang
bulanTahun character varying := (SELECT lpad(date_part('Month',CURRENT_DATE)::character varying || 
date_part('Year',CURRENT_DATE)::character varying,6, '0'));
idS  integer;
BEGIN
-- Ambil nilai maksimal dari bulan dan tahun sekarang
EXECUTE 'SELECT COALESCE((SELECT MAX(SUBSTR(id,1,4)::integer) FROM '|| $2 ||' WHERE SUBSTR(id,5,10) = 
lpad(' || bulanTahun  || '::character varying,6,0::character varying)),0)' INTO idS;
-- tambahkan nilai id dengan max+1
idS = idS + $1;
-- Kembalikan nilai dengan format noUrutBulanTahun
RETURN lpad(idS::character varying,4,'0') || lpad(bulanTahun ,6,'0');
END;
$BODY$
  LANGUAGE plpgsql ;
Selanjutnya dicoba memanggil fungsi getId saat insert pada tabel tes.

INSERT INTO tes(id) VALUES(getId(1,'tes'));

Jangan lupa bikin tabelnya dulu... :D
CREATE TABLE tes
(
  id character varying(10) NOT NULL,
  CONSTRAINT tes_pkey PRIMARY KEY (id )
)

0 komentar:

Posting Komentar