仮定(例のために )あなたのdeals
テーブルは次のようになります
--------------------------- | id | deal_date | deal | --------------------------- | 1 | 2014-03-10 | Deal1 | | 2 | 2014-03-11 | Deal2 | | 3 | 2014-03-12 | Deal3 | ---------------------------
これで、プロシージャコードは次のようになります
DELIMITER //
CREATE PROCEDURE get_deals()
BEGIN
-- create a temporary table and fill it with the desired subset of data
-- Apply WHERE and ORDER BY as needed
DROP TEMPORARY TABLE IF EXISTS tmp_deals;
CREATE TEMPORARY TABLE tmp_deals
SELECT id, deal_date, deal -- explicitly specify real column names here. Don't use SELECT *. It's a bad practice.
FROM deals
ORDER BY id DESC;
-- write the resultset to the file
SELECT *
INTO OUTFILE '/path/to/deals.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM tmp_deals;
-- return the resultset to the client
SELECT * FROM tmp_deals;
END//
DELIMITER ;
実行後:
CALL get_deals();
クライアントでは次のようになります:
--------------------------- | id | deal_date | deal | --------------------------- | 3 | 2014-03-12 | Deal3 | | 2 | 2014-03-11 | Deal2 | | 1 | 2014-03-10 | Deal1 | ---------------------------
そして、ファイルの内容は次のようになります:
3,"2014-03-12","Deal3" 2,"2014-03-11","Deal2" 1,"2014-03-10","Deal1"
注: OUTFILE
を使用する場合 MySQLでは、ファイルを新たに作成する必要があります 。ファイルを出力ディレクトリに残しておくと、後続のプロシージャ呼び出しで次のエラーが発生します
これを回避する1つの方法は、プロシージャ自体の内部でファイル名にタイムスタンプを追加するか、パラメータを介して値を渡すことです。