数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

在Windows上的MySQL UDF开发应用


发布日期:2020年11月24日
 
在Windows上的MySQL UDF开发应用

曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告不过似乎发现是我搞错了MySQL的技术支持人员给了非常完美的解答同大家分享一下下边是原文回复

用户你好抱歉这并不是一个bug下面我粘贴一个以前为某个客户做的简例假设你有了VC++源码分发并且有一个正常运行的MySQL服务器

我将创建一个UDF它将一个名字:

注意:例子非常简陋目的是让你了解该如何处理手头的UDF

打开 mysqlddsw 工作区

添加新项目到这个工作区

Project name: my_udf // 项目名称:my_udf

选择 Win DynamicLink Library // Win动态连接库

点击 OK

选择 An Empty DLL project // 一个空DLL项目

点击 Finish

点击 OK

添加新文件 my_udfcpp 到项目中:

#include

#include

#include

extern C {

char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null

char *error);

// 兼容C

}

char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null

char *error)

{

char * me = my name;

return me;

// 调用此UDF将返回 my name

}

按 Ctrl+N 来创建一个新文件

选择 text 类型

File name: my_udfdef file://文件名:my_udfdef

按照下边的内容编辑文件

LIBRARY UDF_EXAMPLE

DESCRIPTION Example Using UDF with VC++

VERSION

EXPORTS

my_name

右击my_udf项目并选择Settings

点 C/C++ 选项卡

选择 General

添加宏 HAVE_DLOPE 到预处理器定义

选择 Preprocessor

添加头文件路径: Additional Include directories

例如: /include

按 F 去编译成 DLL

复制 my_udfdll 到环境变量path定义过的目录

比如 \winnt\system

打开mysql客户端

C:\mysqludf\bin>mysql uroot p

Enter password:

Welcome to the MySQL monitor Commands end with ; or \g

Your MySQL connection id is to server version: maxnt

Type help; or \h for help Type \c to clear the buffer

mysql> CREATE FUNCTION my_name RETURNS STRING SONAME my_udfdll;

Query OK rows affected ( sec)

mysql> select my_name();

mysql> drop function my_name;

Query OK rows affected ( sec)

以下是MySQL技术人员的回信原文

Sorry this isnt a bug

Below I pasted a sample I did sometime ago for another user:

Ok Assuming you have VC++ and the source distribution and a server

running

I will create a UDF that returns a name:

Note: the sample is ugly but the purpose here is to show you how

to handle the UDF

Open the mysqlddsw workspace

Add New project to the workspace

Project name: my_udf

Select Win DynamicLink Library

Click OK

Select An Empty DLL project

Click Finish

Click OK

Add a new file called my_udfcpp to the project:

#include

#include

#include

extern C {

char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null

char *error);

}

char *my_name(UDF_INIT *initid UDF_ARGS *args char *is_null

char *error)

{

char * me = my name;

return me;

}

Type Ctrl+N for to create a new file

Select text type

File name: my_udfdef

Edit the above file with the below contents:

LIBRARY UDF_EXAMPLE

DESCRIPTION Example Using UDF with VC++

VERSION

EXPORTS

my_name

Right Click the my_udf project and select Settings

Click the C/C++ tab

Select General in the Category Combo

Add the macro HAVE_DLOPEN to the PreProcessor definition

Select Preprocessor in the Category Combo

Add the include path to the text box: Additional Include directories

eg: /include

Press F for to build the DLL

Copy the my_udfdll to the environment path directory:

\winnt\system for example

Start the mysql client and issue:

C:\mysqludf\bin>mysql uroot p

Enter password:

Welcome to the MySQL monitor Commands end with ; or \g

Your MySQL connection id is to server version: maxnt

Type help; or \h for help Type \c to clear the buffer

mysql> CREATE FUNCTION my_name RETURNS STRING SONAME my_udfdll;

Query OK rows affected ( sec)

mysql> select my_name();

mysql> drop function my_name;

Query OK rows affected ( sec)

上一篇:linux mysql密码重设

下一篇:MS SQL7.0的数据迁移到MySQL上的一种方法