sql >> Database >  >> RDS >> Mysql

mysql opgeslagen procedure met INTO OUTFILE

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.



  1. Wijzigingen ophalen uit tabel met ElasticSearch JDBC-rivier

  2. SQL-fout ORA-01722:ongeldig nummer

  3. MySQL REPLACE:Hoe vervang je alle voorkomens van een char in elke afzonderlijke substring begrensd door dezelfde kop en staart

  4. PHP PDO haalt null op