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

DELIMITER MySQLコマンドラインツールでは、コマンドを使用できます。DelimiterphpMyAdminでは、をクリックする前にテキストボックスを使用する必要があります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 に答える