Cara membuat UDF di Firebird dengan Delphi

Database Firebird dibandingkan dengan MySQL memang kalah populer.  Hal itu salah satunya mungkin fungsi-fungsi di Firebird sangat-sangat terbatas.  Tapi dibalik keterbatasan itu Firebird punya keunggulan yaitu UDF-nya lebih mudah dibuat dibandingkan MySQL terutama bagi programmer pemula.

Buat project baru pilih shared DLL. Lalu buat fungsi seperti berikut:


- Return integer:

function tambah(a:PInteger; b:Pinteger):PInteger;
begin
result:=PInteger(a^+b^);

end;

- Return String

Jika fungsi anda return string anda harus mendeklarasikan external function ib_util_malloc terlebih dahulu setelah uses:

function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

Kemudian buat fungsinya sebagai berikut:

function teststr(const x:PAnsiChar):PAnsiChar;cdecl;
 var s:string;
begin

s:=string(x);
Result:=ib_util_malloc(Length(s)+1);
System.AnsiString.StrPCopy(Result,AnsiString(s)) ;
//tambahkan dahulu uses System.AnsiString di unit anda.
end;

Kalau sudah selesai, compile Delphi DLL anda lalu taruh di folder UDF Firebird.  Lalu tinggal kita deklarasikan fungsi tersebutt:

DECLARE EXTERNAL FUNCTION TAMBAH
Integer, Integer
RETURNS Integer BY VALUE
ENTRY_POINT 'tambah'
MODULE_NAME 'your dll';

DECLARE EXTERNAL FUNCTION TESTSTR
CSTRING(255)
RETURNS CSTRING(255)
ENTRY_POINT 'teststr'
MODULE_NAME 'your dll';

Testing di firebird:
select tambah(5,2) from rdb$database;
select teststr('abcde') from rdb$database;