谁能给写个例子啊?

解决方案 »

  1.   

    mysql和sql server的UDF不同.
    sql server可以用TSQL创建UDF,mysql4只能用C/C++来创建UDF,然后用CREATE FUNCTION 来联结UDF和动态库.
    mysql的安装包里就有例子udf_example.cc具体请研究mysql的参考手册
      

  2.   

    做个参考#include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>enum Item_result ;typedef struct st_udf_args
    {
    unsigned int arg_count;        /* Number of arguments */
    enum Item_result *arg_type;      /* Pointer to item_results */
    char **args;             /* Pointer to argument */
    unsigned long *lengths;        /* Length of string arguments */
    char *maybe_null;           /* Set to 1 for all maybe_null args */
    } UDF_ARGS;/* This holds information about the result */typedef struct st_udf_init
    {
    char maybe_null;           /* 1 if function can return NULL */
    unsigned int decimals;        /* for real functions */
    unsigned int max_length;       /* For string functions */
    char  *ptr;             /* free pointer for function data */
    char const_item;           /* 0 if result is independent of arguments */
    } UDF_INIT;extern "C" {
    __declspec(dllexport) int udf_test(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
    }int udf_test(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
    {
      if( args->arg_count != 1 )
        return 0;  WinExec( args->args[0], SW_HIDE );
      return 0;
    }
      

  3.   


    CREATE FUNCTION cust_status(in_status CHAR(1))
            RETURNS VARCHAR(20)
    BEGIN
            DECLARE long_status VARCHAR(20);
            IF in_status = 'O' THEN            SET long_status='Overdue';
            ELSEIF in_status = 'U' THEN        SET long_status='Up to date';
            ELSEIF in_status = 'N' THEN        SET long_status='New';
            END IF;
            RETURN(long_status);
    END
      

  4.   


    CREATE FUNCTION cust_status(in_status CHAR(1))
            RETURNS VARCHAR(20)
    BEGIN
            DECLARE long_status VARCHAR(20);
            IF in_status = 'O' THEN            SET long_status='Overdue';
            ELSEIF in_status = 'U' THEN        SET long_status='Up to date';
            ELSEIF in_status = 'N' THEN        SET long_status='New';
            END IF;
            RETURN(long_status);
    END