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

原创 2003年06月25日 15:32:00

(接上一篇)

如何编写InterBase UDF<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

warton

怎么编写字符串和日期型处理函数的UDF呢?

 

下面编写一个“Left“函数

    内存分配问题:

              如果你使用IB(InterBase)5.1以下版本的话,在你的单元文件中键入下面的声明:

function malloc(Bytes: Integer): Pointer; cdecl; external 'msvcrt.dll';

       如果你有5.5以上的版本,你就不需要这么做了。这样,先确定ib_util.pas 文件在你的编译器可以找到的路径中,并且ib_util.dll也在你的搜索路径之中。

最简单的方法是放到的库可搜索到的路径。

                            c:/Program Files/InterBase Corp/InterBase/include

然后复制

              c:/Program Files/InterBase Corp/InterBase/lib/ib_util.dll

        到你的windows系统目录下(典型的是:c:/Windows/System)。最后在你的单元文件的use子句中将ib_util.pas加进去

               ...,

ib_util;

为什么有如此奇特的内存分配?为什么我不能用AllocMem分配内存,或者其它方法?问题很简单:你不能,所以不要问!更复杂的问题是每一个编译器使用它喜欢的算法来进行内存管理,这是被操作系统控制着的。例如,VC和Delphi管理内存的方式不同,猜这是为什么?IB是在VC下编译的,在5.5以前的版本中,你必须直接指定运行库。在IB5.5之后,IB给了一个IB调用使得这成为可能。既然这样,那我们继续进行编写字符串操作的函数。

 

构建函数

       在新的单元文件中,作如下声明:

function Left(sz: PChar; Cnt: Integer): PChar; cdecl; export;

    在函数实现部分:

 

在你的工程文件中,在“exports“部分键入:

 

Now,再次编译工程项目….

现在,为了使用函数,在ISQL中重新连接数据库,输入:

               cstring(64), integer

               returns cstring(64) free_it

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

测试这个函...

select f_Left('Hello', 3) from rdb$database

 

仍然相当简单,哈?

 

上我们来编写一个时间函数

 

       IB6中,有三种不同的时期类型被支持,DATE,TIME,TIMESTAMP,与IB5.5及以前老版本中的相比,TIMESTAMP 的数据类型实质上相当于IB5.5DATE类型。

       为了在你的程序中”decode””encode”这些类型。你应该了解一点IB API相关的信息。输入以下代码:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

现在我们写日期UDF:

       在单元文件的interface部分,输入声明:

implementation(实现)部分,输入:

 

最好,在你的工程文件中:在““部分,输入:

exports

Modulo,

Left,

Year,

Hour;

现在编译工程...

 

为了使用这个函数,就像上面那样:用ISQL连接数据库,输入:

 

最后再测试一下看!

select f_Year(cast('7/11/00' as date)) from rdb$database

这一部分并非像前面字符串和整数那样操作哪样了,但是还是相当...simple,哼!

编写Linux/Unix平台的UDF

(未完待续!!)

[UDF系列]如何编写InterBase UDF

译者叙: 由于InterBase性能方面表现突出,并且它是开源和跨平台的,有很多使用Delphi,C++Builder的程序员开始采用它做为其后数据库平台。但是InterBase的中文资料简直太少了...
  • SeekMyself
  • SeekMyself
  • 2013年02月25日 13:09
  • 1378

使用Python实现Hive的UDF示例

主要分为两个部分,一个部分为Python脚本实现想要实现的功能,另外一个部分为HQL部分,调用Python脚本对数据进行处理。 HQL调用Python实现的UDF其实有一个重定向的过程,把数据表中之...
  • BabyFish13
  • BabyFish13
  • 2016年12月10日 15:49
  • 1744

采用java和python编写hive中的udf

在hive中,用户自定义函数(UDF)是一个允许用户扩展HiveQL的强大的功能。用户将自定义的函数加入到用户会话中(交互式的或者通过脚本执行的),它们就会像内置的函数一样使用。 编写UDF的java...
  • u010705209
  • u010705209
  • 2016年10月26日 16:04
  • 987

hive入门学习:UDF开发

hive入门学习:UDF开发          hive中提供了很多的内置函数,可以通过show functions来查看提供了哪些函数,可以desc  function extended 函数,...
  • liyaohhh
  • liyaohhh
  • 2016年02月16日 20:54
  • 711

Hive UDF自定义函数编写小例子

感谢段海涛老师~ 先写一个java类,定义函数逻辑(静态代码块模拟字典) package club.drguo.hive; import java.util.HashMap; import org...
  • Dr_Guo
  • Dr_Guo
  • 2016年03月26日 22:03
  • 1809

Hive入门--3.UDF编写与使用

1. 编写UDF函数a) 继承org.apache.hadoop.hive.ql.exec.UDF类,实现evaluate()evaluate()函数在父类中没有package cn...
  • u014726937
  • u014726937
  • 2016年07月21日 17:46
  • 677

Hive自带Function使用及UDF编程

Hive的自定义function
  • wushuang3625
  • wushuang3625
  • 2017年03月28日 01:31
  • 490

【Hive自定义UDF函数】 与 【hive字符串函数】

Hive的UDF 整理笔记 Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以。 Hive的UDF开发只需要重构U...
  • baolibin528
  • baolibin528
  • 2015年05月16日 22:37
  • 1244

【提权】udf提权入侵

今天闲的无聊DEDECMS搞了几个站。没事做提权吧。真的很久很久没有玩这东西了。 测试经典的UDF.dll提权一次性成功。      dedecms的账号和密码都保存在data/co...
  • u014270687
  • u014270687
  • 2015年05月09日 20:03
  • 868

编写hive udf和使用hive udf:hue的hive界面中使用hive udf函数、oozie使用hive udf函数、hive命令行使用udf函数

开发环境:jdk1.7+idea 16+Hive-1.1.0 使用udf的生产环境:cdh5.8.0+hive-1.1.0 1、导入hive的所有相关jar包 或者使用maven引入C...
  • chenjieit619
  • chenjieit619
  • 2016年11月15日 11:14
  • 420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[UDF系列]如何编写InterBase UDF 之二
举报原因:
原因补充:

(最多只允许输入30个字)