2017-04-14 2 views
0

J'ai créé une procédure stockée avec un curseur pour obtenir les informations de quelques tables dans une table temporaire, puis exporter le résultat dans plusieurs fichiers, un pour chaque ID client, le curseur et la boucle obtenir tout le droit d'information, mais je vais avoir des problèmes de syntaxe lors de la création de chaque fichierExportation MySQL dans le fichier Outfile

BEGIN 
    DECLARE id_cli INT; 
    DECLARE cur_id_cli CURSOR FOR SELECT id FROM cliente ORDER BY id; 

    OPEN cur_id_cli; 

    read_loop: LOOP 
    FETCH cur_id_cli INTO id_cli; 


DROP TEMPORARY TABLE IF EXISTS tmp_reporte_enviadas_sucursal_mensual; 
    CREATE TEMPORARY TABLE tmp_reporte_enviadas_sucursal_mensual 

    SELECT * FROM 
    ((SELECT 'Promo_id', 'Mensaje', 'Sucursal_id', 'Direccion') UNION ALL (SELECT 
     p.id, 
      p.mensaje, 
      s.id, 
      s.direccion 
    FROM 
     Usuario_Promo AS up, Promo_Sucursal AS ps, Cliente_Sucursal AS cs, Cliente AS c, Promo AS p, Sucursal AS s 
    WHERE 
     p.id = ps.Promo_id 
      AND up.promo_id = ps.id 
      AND up.recibido = 1 
      AND ps.Cliente_Sucursal_id = cs.id 
      AND cs.cliente_id = id_cli 
      AND DATE(up.fecha_recibido) BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW() 
      AND s.id = cs.sucursal_id 
    ORDER BY p.id)) AS tmp_reporte_enviadas_sucursal_mensual; 

SET @idCli = CAST(id_cli AS CHAR); 
SET @fullOutputPath = CONCAT('D:/Octagon/Apps/Flyermob/Clientes/Reportes_Sql/reporte_enviadas_sucursal_mensual_',@idCli,'.csv'); 

SELECT * FROM 
INTO OUTFILE @fullOutputPath 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
FROM tmp_reporte_enviadas_sucursal_mensual; 

SELECT * FROM tmp_reporte_enviadas_sucursal_mensual; 

    END LOOP; 

    CLOSE cur_id_cli; 
END 

voici où je vais avoir la question:

SELECT * FROM 
    INTO OUTFILE @fullOutputPath 
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '\"' 
    FROM tmp_reporte_enviadas_sucursal_mensual; 

chaque fois que je tente de sauver, il dit qu'il ya un problème de syntaxe près de @fullOutputPath si je supprime cette section, la procédure exécuter perf ectly et j'obtiens tous les résultats pour chaque identification de client.

Juste pour le sortir de la route id_cli est une clé primaire, donc il n'y a aucune chance de répéter et j'ai plein de permissions sur @fullOutputPath.

+0

'' 'SELECT * FROM' ??? '' Il doit y avoir un nom de table où le "???" sont. –

Répondre

0

J'ai réussi à le faire fonctionner avec

SET @idCli = CAST(id_cli AS CHAR); 
SET @fullOutputPath = CONCAT('flyermob/cliente/reporte_enviadas_sucursal_mensual_cliente_',@idCli,'.csv'); 

set @q1 := concat("SELECT * INTO OUTFILE '",@fullOutputPath, 
"' FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
FROM tmp_reporte_enviadas_sucursal_mensual"); 

prepare s1 from @q1; 
execute s1; 
deallocate prepare s1; 

Il crée le fichier dans le dossier par défaut MySql

0

Essayez ceci:

SELECT * FROM tmp_reporte_enviadas_sucursal_mensual 
    INTO OUTFILE @fullOutputPath 
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '\"'; 
+0

Salut, merci pour la réponse, j'ai essayé et j'ai toujours l'erreur de syntaxe sur '@ fullOutputPath' – gusadolfo