4

我尝试使用 phpMyAdmin 例程面板中的导出选项将函数从一个数据库复制到另一个数据库,但没有成功。

导出选项为我提供了以下内容:

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 

我尝试DELIMITER $$在顶部和$$之后添加END,但仍然没有喜悦。

4

2 回答 2

4

您必须将客户端的语句分隔符设置为字符串;,以免它认为结束CONCAT()表达式的分号也终止CREATE FUNCTION语句。

在 MySQL 命令行工具中,您可以使用DELIMITER 命令. 在 phpMyAdmin 中,您需要Delimiter在单击之前使用文本框Go

于 2013-01-18T22:42:49.010 回答
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

这将只转储存储过程。

试试看 !!!

于 2013-01-18T22:52:18.770 回答