2012-03-13 33 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文件。

相關問題