Mysql
 sql >> Baza danych >  >> RDS >> Mysql

procedura składowana mysql z INTO OUTFILE

Zakładając (ze względu na przykład ), że Twoje deals tabela wygląda jak

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

Teraz kod procedury może wyglądać

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 ;

Po wykonaniu:

CALL get_deals();

Na kliencie otrzymasz:

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

A zawartość pliku będzie następująca:

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

Uwaga: podczas korzystania z OUTFILE MySQL wymaga, aby plik został utworzony od nowa . Jeśli zostawisz plik w katalogu wyjściowym, przy kolejnym wywołaniu procedury pojawi się następujący błąd

Jednym ze sposobów na obejście tego problemu jest dołączenie znacznika czasu do nazwy pliku albo w samej procedurze, albo przez przekazanie wartości przez parametr.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL :nie znajduje się w GROUP BY

  2. Nieznana kolumna w podzapytaniu mysql

  3. Czy rozwijane wybrane pola są podatne na wszelkiego rodzaju wstrzyknięcia?

  4. Przekaż wartość zmiennej z JS do PHP

  5. Usuń zapytanie nie działa w mysql