转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> 其他 >> 正文
如何创建InterBaseUDF         ★★★★

如何创建InterBaseUDF

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1684 更新时间:2009/4/22 23:21:51

[UDF系列之五]:如何创建InterBase UDF

by Paul McGee (c) Borland Internation Inc.

Warton译


[概述]:

用户定义函数(UDF)是一种采用编译语言编写的函数,是用户为执行自定义的功能和常用的任务面设计的。UDF 允许程序员模块化一个数据库应用程序,并能嵌入到数据库以增强数据库自身的功能。UDF 也总是在数据库服务器端执行。这可以减少网络通信量。

UDF可以执行事务比如获得服务器上可用硬盘空间,清理字符串的空格,为一系列值计算标准偏差等等。UDF能完成任何功能只要编程语言能够表达出来。这种编程语言能常是在C和C++之间选择(当然,用户可以用其它语言,比如pascal 译者注)。

UDF在提供SQL语言不能处理的功能、查询、更新数据库,以及为异源客户工作站提供通用函数方面非常有效。

与其它功能相比,使用UDF要花费一些代价。这主要表现在两方面:第一,在UNIX或VMS平台,UDF是模块化AST程序,这意谓着当UDF在执行时,没有其它的存取操作可以发生。这就要求我们尽量使UDF尽可能的小和有效率。第二,如果数据库服务器崩溃,你需要将数据转移到另一台机器上。你必须首先在新的服务器上安装UDF库。如果在相同的操作系统下,这并不难。但是当转移到另一操作系统时,你只少需要编译一遍UDF库的源代码。

[UDF示例]:

     InterBase包含几个内置SQL 函数:UPPER,GEN_ID,CAST 。UPPER将一个字符串转为大写。GEN_ID生成一个唯一长整型值,因为一个特殊的生成器已经在数据库中定义。这在生成主键时是非常有用的,比如客户编号或职员编号。CAST将一种类型列转化为另一种类型的列。

    InterBase 也提供了另外一些UDF的源代码,在examples目录下。它们包含在udflib.c文件中。这里定义的UDF有:lower, strcat, substr, trim, trunc, doy, moy, dow, sysdate, add2, mul, fact, abs, maxnum, sqrt, blob_linecount, blob_bytecount, substr_blob。Lower是将字符串转化为小写串。Strcat连接两个字符串。Substr返回字符串的一部分。Trim清空字符串中的空格。Trunc返回删节后的串。doy(day of year),moy(month of year),dow(day of week)。Sysdate返回当前日期以字符串的形式(“mmm-dd-yyyy”).add2将两整数相加在一起。Mul将两double数相乘.maxnum返回两数中较大者。Sqrt为取平方。blob_bytecount返回blob的大小。Substr_blob,取blob的一部分文本。

    我们将增加几个新的UDF:rtrim, left, right, swapcase, imonth, iday, iyear。Rtrim去掉字符串右边的空格。Left返回一个输入串前n个字符的串。Right则是返回右过n个字符的串。Swapcase将小写转大写并将大写转小写。imonth返回月份的值(1-12)。Iday返回day的值(1-31)。Iyear返回年的值如:2002。

[编写UDF]:

    一旦你编写的UDF,你必须创建一个动态链接库,以便上UDF可以使用。然后你必须在数据库中定义它。

在数据定义语言中定义 UDFs 非常简单,基本的语法是:

DEFINE EXTERNAL FUNCTION name [<datatype> | CSTRING (int)

                [, <datatype> | CSTRING (int) ...]]

                RETURNS {<datatype> [BY VALUE] | CSTRING (int)}

                ENTRY_POINT "<entryname>"

                MODULE_NAME "<modulename>" ;

Name是指函数的名称,它可达到31个字符长。第一个datatype是输入参数。Datatype指标准的interbase数据类型:INTEGER, CHAR, VARCHAR等。或者,你可以使用CSTRING这个C风格没用结束的字符数组。Entry_point指实际的函数名。在InterBase提供示例中,SQL函数名是lower而实际函数名在udflib.c中为fn_lower_c。模块名指的是函数被编译后的输出库名。例如:这里用SQL 定义函数lower和substr。

        DEFINE EXTERNAL FUNCTION lower

                VARCHAR (256)

                RETURNS CSTRING (80)

                ENTRY_POINT "fn_lower_c" MODULE_NAME "funclib";

       

        DEFINE EXTERNAL FUNCTION substr

                CSTRING (256), SMALLINT, SMALLINT

[1] [2] [3]  下一页


[MySql]如何创建Linux启动盘  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台