2012-03-13 80 views
4

我有以下的StoredProcedureMySQL如何不断创建独特的文件来输出?

DELIMITER ## 
CREATE PROCEDURE exportFile() 
BEGIN 

Select * from Sample 
INTO OUTFILE '~/Sample.csv' 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

END ## 
DELIMITER ; 
  • 首次调用存储过程后,你会得到ERROR 1086 (HY000): File '~/Sample.csv' already exists - 这是理所当然的。
  • 我需要不断地不断创造新的文件。 (即Sample1.csv,Sample2.csv,Sample3.csv ...等等)。

问题:我该怎么做?

回答

6

为什么不追加时间戳的文件吗?

下面一个例子追加时间戳的文件:

DELIMITER ## 
CREATE PROCEDURE exportFile() 
BEGIN 

Select * from Sample 
INTO OUTFILE CONCAT('~/Sample', CONCAT(DATE_FORMAT(your_date_field, '%d%m%Y') ,'.csv')) 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

END ## 
DELIMITER ; 
+4

Mysql的不允许使用的功能或变量作为文件名 – piotrekkr 2012-03-13 18:00:50

+0

@aleroot我一直在争取这样做,但我得到一个错误4200语法试图做到这一点作为piotrekkr牵连 – stackoverflow 2012-03-13 18:02:15

+0

如果你可以使用mysqldump的情况下,最好的办法(IMO)将使用mysqldump与标签选项:http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_tab与'--fields终止,由= ... ,--fields封闭,由= ... --fields-可选封闭,由= ...,--fields转义,通过= ...' – piotrekkr 2012-03-13 18:08:59

0

尝试使用mysqldump:

mysqldump -u root -p DATABASE TABLE_NAME --tab=/path/where/mysql/can/write --fields-terminated-by="," --fields-enclosed-by='"' --fields-escaped-by='\' 

文档:http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_fields

+0

@piotrekker我的回答是这真的是动态创建使用与文件名的唯一途径? – stackoverflow 2012-03-13 19:05:40

+0

既然你不能使用函数或变量文件的路径,这只是我能想到的办法。 – piotrekkr 2012-03-13 19:13:53

3

我得到了相似的要求进行调试递归存储过程。

这为我工作:

SET @s = CONCAT('SELECT * INTO OUTFILE ',"'", CONCAT('Result',FLOOR(1000+RAND()*9999)),'.txt',"'",' FROM TempTable112'); 
PREPARE stmt2 FROM @s; 
EXECUTE stmt2; 
DEALLOCATE PREPARE stmt2; 

我用的是XAMPP,并获得在C输出:\ XAMPP \ mysql的\ DATA \ MyFolder文件。

相关问题