Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql съхранена процедура с INTO OUTFILE

Ако приемем (в името на примера ), че вашите deals таблицата изглежда така

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

Сега кодът на вашата процедура може да изглежда

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 ;

След като го изпълните:

CALL get_deals();

На клиента ще получите:

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

И съдържанието на файла ще бъде:

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

Забележка: когато използвате OUTFILE MySQL изисква файлът да бъде създаден отново . Ако оставите файла в изходната директория, тогава при следващото извикване на процедурата ще получите следната грешка

Един от начините за заобикаляне на това е чрез добавяне на времева марка към името на файла или в рамките на самата процедура, или чрез предаване на стойност през параметър.



  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 или Rails да получите AVG на ден в рамките на определен период от време

  2. Как да използвам външно пълно присъединяване в laravel 5.0?

  3. Има ли начин в SQL (MySQL) да се направи кръгова система ORDER BY в определено поле?

  4. Използвайте MySQL релационни бази данни в Ubuntu 9.10 (Karmic)

  5. Как да настроите локала за текущата връзка в MySQL