[UDF系列]如何编写InterBase UDF 之一

如何编写 InterBase UDF

( 作者: Gregory Deatz - Hoagland, Longo, Moran, Dunst & Doukas)

warton 译

_ 译者叙: _

_ 由于 InterBase _ _ 性能方面表现突出,并且它是开源和跨平台的,有很多使用 Delphi,C++Builder _ _ 的程序员开始采用它做为其后数据库平台。但是 InterBase _ _ 的中文资料简直太少了。昨日,一网友在 CSDN _ _ 上提到 InterBase _ _ 的 UDF(user defined functions _ _ 用户自定义函数 ) _ _ ,我顺手一查,网上竟然查不到这方面的中文资料。于是,我今天将一篇如何编写和使用 InterBase UDF _ _ 的文章翻译给大家,希望使用 Interbase,C++Builder,Delphi _ _ 的朋友能喜欢 ! _

_ -----warton 2003.01.21 _

_ _

** 什么是 UDF ** ** ? **


UDF—-( user defined functions ) 用户定义函数,是 InterBase 中采用任何一种语言编写 ( 一般用 C/C++ ,也可以用其它语言如 pascal) 并编译成共享库的函数。在 windows 平台下,共享库一般指动态链接库 (DLL) 。

** 为什么编写 UDF? **


** ** 毕竟存储过程自身可以实现相当多的功能。那为什么还要用 UDF 呢?

然而,事实是 InterBase 并没有提供相当丰富的内置函数。一些普通的函数、字符串操作、日期操作等相关的函数据都没有提供。

于是这样的事发生了,像 Delphi,C 这样的编程语言可以提供执行速度特别快的模块算法、日期变量处理、浮点数格式化、及字符中操作程序。

编写 UDF 是个狂简单的任务,这可以说是从所周知了。然而,没经验的编写者可能对编写 DLL/ 共享库感觉太难和不安 …

** 使用 Delphi ** ** 编写 Windows ** ** 平台的 UDF **

** 首先启动一个 Delphi ** ** 工程 **

1. 启动车个 delphi dll 工程 ( 一个特殊类型的工程,当你选择“ File ”,“ New ” )

** 为你的函数生成一个新的单元 **

2. 选择 ”File”,”New”…UNIT

3. 聪明的你最好现在保存所有文件 … 把你的工程保存到一个你认为合适的地方。

** 生成一个模块程序 **

** ** 4. 在新生成的单元文件:

5. 在接口段定义你的函数:

function Modulo(var i, j: Integer): Integer; cdecl; export;

6. 实现这个函数:

function Modulo(var i, j: Integer): Integer;

begin

if (j = 0) then

result := -1 // just check the boundary condition, and

// return a reasonably uninteresting answer.

else

result := i mod j;

end;

7.在新生成的工程源代码中,直接将下面的代码写到”begin end.”之上:

   exports

Modulo;

8.现在编译工程,你将得到一个可工作的动态链接库。

9.现在,我必须做的是将这个DLL复制到InterBase可以找到的UDF目录下,它可能是:

c:\Program Files\Borland\InterBase\UDF

10. 如何使用 UDF…. 按如下的操作。使用 ISQL 连接到一个己存在的新的数据库

11. 写上如下的代码:

        declare external function f_Modulo


        integer, integer


        returns


        integer by value


        entry_point 'Modulo' module_name 'dll name minus ".dll"';

12 提交你的改变。

13. 现在测试它 …

select f_Modulo(3, 2) from rdb$database

吆 … 这简直太简单了,不是吗?

** 但是关于字符串和日期型怎么处理呢? **


_ ( _ _ 由于时间问题,今天就翻译到这,我还要编程序,不好意思 J :), 明天见 !!) _

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus