sql >> Databasteknik >  >> RDS >> Mysql

mysql lagrad procedur med INTO OUTFILE

Förutsatt (för exemplets skull ) att dina deals tabellen ser ut som

---------------------------
| id | deal_date  | deal  |
---------------------------
| 1  | 2014-03-10 | Deal1 |
| 2  | 2014-03-11 | Deal2 |
| 3  | 2014-03-12 | Deal3 |
---------------------------

Nu kanske din procedurkod ser ut

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 ;

Efter att ha kört det:

CALL get_deals();

På klienten får du:

---------------------------
| id | deal_date  | deal  |
---------------------------
| 3  | 2014-03-12 | Deal3 |
| 2  | 2014-03-11 | Deal2 |
| 1  | 2014-03-10 | Deal1 |
---------------------------

Och filinnehållet kommer att vara:

3,"2014-03-12","Deal3"
2,"2014-03-11","Deal2"
1,"2014-03-10","Deal1"

Obs! när du använder OUTFILE MySQL kräver att filen skapas på nytt . Om du lämnar filen i utdatakatalogen får du följande felmeddelande vid det efterföljande proceduranropet

Ett sätt att komma runt det är genom att lägga till en tidsstämpel till filnamnet antingen inom själva proceduren eller genom att skicka ett värde genom en parameter.



  1. Vilken tidsseriedatabas är bättre:TimescaleDB vs InfluxDB

  2. Hur FROM_DAYS() fungerar i MariaDB

  3. Hur implementerar jag den här mySQL-frågan korrekt i en PHP-fil och visar resultaten?

  4. MySQL Matcha mot med flera värden till MOT