0

私のバッチファイルには、次のようなものが含まれます:

set MUSER=root
set MPASS=xprd123
set MHOST=172.33.49.55
set DB=DBName1
set MBIN=C:\Program Files\MySQL\MySQL Server 5.5\bin

set scriptpath=D:/Graph_draw/ASSET_Creation/EXTERNAL/MYSQL_STATS_COLLECTOR/foldrname1
"%MBIN%\mysql.exe" -u"%MUSER%" -p"%MPASS%" -h "%MHOST%" "%DB%" -e "set @2:='%scriptpath%'; source DBQuery1.sql;"

DBQuery1.sql の内容は次のようになります。

SELECT 'INNODB_OS_LOG_WRITTEN','QUESTIONS'
UNION
select MAX(IF(variable_name = 'INNODB_OS_LOG_WRITTEN', VARIABLE_VALUE, NULL)) 
AS INNODB_OS_LOG_WRITTEN, MAX(IF(variable_name = 'QUESTIONS', VARIABLE_VALUE, NULL)) 
AS QUESTIONS from information_schema.GLOBAL_STATUS INTO OUTFILE '@2/Stats.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

これが DBQuery1.sql 内の SELECT クエリにパスを渡す方法かどうかはわかりません。

このコードは機能していません。

私が得ているエラーは次のとおりです。

ERROR 1 (HY000) at line 1 in file: 'DBQuery1.sql': Can't create/write to file 'C
:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\Data\
@2\Stats.csv' (Errcode: 2)

バッチ ファイルへのパスの受け渡しに関する他の投稿を見ましたが、何を試しても、この問題を解決できません。

バッチ ファイルを実行すると、パスが sql ファイルに渡されているかどうかがわかりません。また、パスが渡されている場合は、@2 にパスが渡されていないのはなぜですか。

誰でも親切にこれを手伝ってもらえますか。

アップデート :

上記の詳細に追加すると、渡されたパスが sql ファイルで受信されることがわかりました。

次のように変数出力を出力しました。

**SELECT @2;**
SELECT 'INNODB_OS_LOG_WRITTEN','QUESTIONS' 
UNION 
select MAX(IF(variable_name = 'INNODB_OS_LOG_WRITTEN', VARIABLE_VALUE, NULL)) AS INNODB_OS_LOG_WRITTEN, 

MAX(IF(variable_name = 'QUESTIONS', VARIABLE_VALUE, NULL)) AS QUESTIONS 
from information_schema.GLOBAL_STATUS  
INTO OUTFILE '@2\Stats.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';

私が得た出力は次のとおりです。

+------------------------------------------------------------------------+
| @2                                                                     |
+------------------------------------------------------------------------+
| D:/Graph_draw/ASSET_Creation/EXTERNAL/MYSQL_STATS_COLLECTOR/foldrname1 |
+------------------------------------------------------------------------+
ERROR 1 (HY000) at line 2 in file: 'DBQuery1.sql': Can't create/write to file 'C
:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\Data\
@2\Stats.csv' (Errcode: 2)

これは、@2 が '@2\Stats.csv' の値を取得していないことを意味しますが、SELECT @2; SQLで値を取得しています。

何か助けはありますか?

4

1 に答える 1

0

問題は、ご指摘のとおり、ユーザー定義変数@2がINTOOUTFILEのファイル仕様の値に展開されていないことです。動的SQLを使用して、これを回避する方法があります。

SET @stmt = CONCAT(
    ' SELECT ''INNODB_OS_LOG_WRITTEN'',''QUESTIONS'''
,   ' UNION'
,   ' SELECT MAX(IF(variable_name = ''INNODB_OS_LOG_WRITTEN'', VARIABLE_VALUE, NULL)) AS INNODB_OS_LOG_WRITTEN'
,   ' ,      MAX(IF(variable_name = ''QUESTIONS'', VARIABLE_VALUE, NULL)) AS QUESTIONS'
,   ' FROM information_schema.GLOBAL_STATUS'
,   ' INTO OUTFILE ', @2, '/Stats.csv'
,   ' FIELDS TERMINATED BY '','''
,   ' ENCLOSED BY ''"'''
,   ' LINES TERMINATED BY ''\n'''
);
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2012-10-27T11:14:06.417 に答える