sql >> Database teknologi >  >> RDS >> Mysql

mysql lagret procedure med INTO OUTFILE

Forudsat (for eksemplets skyld ), at dine deals tabellen ser ud som

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

Nu ser din procedurekode måske ud

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 at have udfø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 |
---------------------------

Og filindholdet vil være:

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

Bemærk: når du bruger OUTFILE MySQL kræver, at filen skal oprettes på ny . Hvis du efterlader filen i output-mappen, vil du ved det efterfølgende procedurekald få følgende fejl

En måde at omgå det på er ved at tilføje et tidsstempel til filnavnet enten i selve proceduren eller ved at sende en værdi gennem en parameter.



  1. MySQL-gruppe efter sidste indtastning

  2. Brug af MySQL til at beregne saldi fra debet og kreditering i en enkelt tabel

  3. SQL-forespørgsel for at få den seneste række for hver forekomst af en given nøgle

  4. Opdag på hinanden følgende elementer, der opfylder bestemte kriterier i en tidsserie