sql >> Databáze >  >> RDS >> Mysql

mysql uložená procedura s INTO OUTFILE

Za předpokladu (pro příklad ), které vaše deals tabulka vypadá takto

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

Nyní může váš kód procedury vypadat

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 jeho provedení:

CALL get_deals();

Na klientovi získáte:

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

A obsah souboru bude:

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

Poznámka: při použití OUTFILE MySQL vyžaduje, aby byl soubor vytvořen znovu . Pokud ponecháte soubor ve výstupním adresáři, pak při následném volání procedury dostanete následující chybu

Jedním ze způsobů, jak to obejít, je připojení časového razítka k názvu souboru buď v samotné proceduře, nebo předáním hodnoty přes parametr.



  1. PHP/MySQL – zahrnout množná čísla, ale vyloučit singuláry

  2. Zobrazit všechny řádky v tabulce mysql a poté dát možnost smazat konkrétní

  3. 2 způsoby, jak vrátit řádky, které obsahují nealfanumerické znaky v PostgreSQL

  4. Jak získat přístup k mysql mimo můj cluster kubernetes?