曾以為Windows版本的MySQL存在不能使用UDF的BUG諸提交了一個bug報告
不過似乎發現是我搞錯了
MySQL的技術支持人員給了非常完美的解答
同大家分享一下
下邊是原文回復
用戶你好
抱歉
這並不是一個bug
下面我粘貼一個以前為某個客戶做的簡例
假設你有了VC++
源碼分發
並且有一個正常運行的MySQL服務器
我將創建一個UDF它將一個名字:
注意:例子非常簡陋
目的是讓你了解該如何處理手頭的UDF
打開 mysqld
dsw 工作區
添加新項目到這個工作區
Project name: my_udf // 項目名稱:my_udf
選擇 Win
Dynamic
Link Library // Win
動態連接庫
點擊 OK
選擇 An Empty DLL project // 一個空DLL項目
點擊 Finish
點擊 OK
添加新文件 my_udf
cpp 到項目中:
#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_udf
def file://文件名:my_udf
def
按照下邊的內容編輯文件
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_udf
dll 到環境變量path定義過的目錄
比如 \winnt\system
打開mysql客戶端
C:\mysql
udf\bin>mysql
uroot
p
Enter password:
Welcome to the MySQL monitor
Commands end with ; or \g
Your MySQL connection id is
to server version:
max
nt
Type
help;
or
\h
for help
Type
\c
to clear the buffer
mysql> CREATE FUNCTION my_name RETURNS STRING SONAME
my_udf
dll
;
Query OK
rows affected (
sec)
mysql> select my_name();
mysql> drop function my_name;
Query OK
rows affected (
sec)
以下是MySQL技術人員的回信原文
Sorry this isn
t 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 mysqld
dsw workspace
Add New project to the workspace
Project name: my_udf
Select Win
Dynamic
Link Library
Click OK
Select An Empty DLL project
Click Finish
Click OK
Add a new file called my_udf
cpp 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_udf
def
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
e
g:
/include
Press F
for to build the DLL
Copy the my_udf
dll to the environment path directory:
\winnt\system
for example
Start the mysql client and issue:
C:\mysql
udf\bin>mysql
uroot
p
Enter password:
Welcome to the MySQL monitor
Commands end with ; or \g
Your MySQL connection id is
to server version:
max
nt
Type
help;
or
\h
for help
Type
\c
to clear the buffer
mysql> CREATE FUNCTION my_name RETURNS STRING SONAME
my_udf
dll
;
Query OK
rows affected (
sec)
mysql> select my_name();
mysql> drop function my_name;
Query OK
rows affected (
sec)
From:http://tw.wingwit.com/Article/program/MySQL/201311/29409.html