2013-01-18 51 views
3

我試圖使用phpMyAdmin例程面板中的導出選項將功能從一個數據庫複製到另一個數據庫,但沒有成功。如何複製MySQL函數?

導出選項提供我有以下:

CREATE DEFINER=`root`@`localhost` FUNCTION `JSON_FIELD_NUM`(`col_name` TEXT CHARSET utf8, `data` TEXT CHARSET utf8) RETURNS text CHARSET utf8 
    NO SQL 
BEGIN 
    RETURN 
    CONCAT('"',col_name,'":', 
     IF(ISNULL(data),0,data) 
    ); 
END 

,當我跑我得到這個錯誤,在另一個數據庫:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7 

我試着END後加入DELIMITER $$在頂部和$$ ,但仍然沒有喜樂。

回答

4

您必須將客戶端的語句分隔符設置爲除;以外的字符串,以便它不認爲結束CONCAT()表達式的分號也會終止CREATE FUNCTION語句。

在MySQL命令行工具中,您可以使用DELIMITERcommand。在phpMyAdmin中,在點擊Go之前,您需要使用Delimiter文本框。

+1

分隔符文本框...很明顯,一旦你知道它的存在,謝謝 – Mahks

+0

永遠不會注意到文本框......謝謝 –

1

有一個更爲簡潔的方式來做到這一點:

MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines" 
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --all-databases" 
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --no-data" 
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --no-create-info" 
mysqldump ${MYSQLDUMP_OPTIONS} > StoredProcedures.sql 
less StoredProcedures.sql 

這將轉儲僅存儲過程。

試試吧!

+0

當然,這將產生與OP已經有問題相同的「CREATE FUNCTION」語句? – eggyal

+0

@eggyal'DELIMITER'語句是在mysqldump內生成的 – RolandoMySQLDBA

+0

而OP說他已經嘗試過使用'DELIMITER'。問題是他沒有使用MySQL命令行工具。 – eggyal