Mysql自定义函数

  • 来源: 编程中国 作者: 若水   2008-04-22/17:24
  • Mysql自定义函数分为两种
    1. 简单的 如string相关的函数
    2. 集合的 aggregate,如sum函数
    创建函数的Mysql命令
    CREATE [AGGREGATE] FUNCTION 函数名称 RETURNS {STRING|INTEGER|REAL|DECIMAL}
        SONAME 链接库的名称

    笔记:
    1.链接库似乎不能带路径
    2.aggregate为集合

    类型
    描述

    STRING
    char *

    INTEGER
    64位int,__int64,unsigned __int64

    REAL
    double

    DECIAML
    还没完成,char*

    UDF_INIT:

    类型
    名称
    描述

    my_bool
    maybe_null
    1 如果返回NULL

    unsigned int
    decimals
    用在REAL函数

    unsigned long
    max_length
    用于STRING函数

    char *
    ptr
    函数数据的自由指针

    my_bool
    const_item
    0时参数无关

    UDF_ARGS:

    类型
    名称
    描述

    unsigned int
    arg_count
    参数个数

    enum Item_result *
    arg_type
    参数类型

    char **
    args
    参数

    unsigned long *
    lengths
    参数长度

    char *
    maybe_null
    当置1时,参数可以为NULL

    char **
    attributes
    属性

    unsigned long *
    attribute_lengths
    属性长度

    模板
    //For Mysql 5.0

    my_bool MyTest_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
    {
    }

    void MyTest_deinit(UDF_INIT *initid)
    {
    }

    //以下为不同情况的函数
    longlong MyTest(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error)
    {
    }

    double MyTest(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
    {
    }

    char* MyTest(UDF_INIT *initid, UDF_ARGS *args,char *result, unsigned long *length,char *is_null, char *error)
    {
    }


    //END

    //以下用于集合

    void MyTest_clear(UDF_INIT *initid, char *is_null, char *error)
    {
    }

    void MyTest_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
    {
    }

    //END


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多