Ervan uitgaande (voor het voorbeeld ) dat uw deals
tabel ziet eruit als
--------------------------- | id | deal_date | deal | --------------------------- | 1 | 2014-03-10 | Deal1 | | 2 | 2014-03-11 | Deal2 | | 3 | 2014-03-12 | Deal3 | ---------------------------
Nu zou uw procedurecode eruit kunnen zien
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 ;
Na het uitvoeren:
CALL get_deals();
Op de client krijg je:
--------------------------- | id | deal_date | deal | --------------------------- | 3 | 2014-03-12 | Deal3 | | 2 | 2014-03-11 | Deal2 | | 1 | 2014-03-10 | Deal1 | ---------------------------
En de inhoud van het bestand zal zijn:
3,"2014-03-12","Deal3" 2,"2014-03-11","Deal2" 1,"2014-03-10","Deal1"
Opmerking: bij gebruik van OUTFILE
MySQL vereist dat het bestand opnieuw wordt aangemaakt . Als u het bestand in de uitvoermap laat staan, krijgt u bij de volgende procedureaanroep de volgende foutmelding
Een manier om dit te omzeilen is door een tijdstempel aan de bestandsnaam toe te voegen, ofwel binnen de procedure zelf, ofwel door een waarde door een parameter te geven.