Problème avec la création et l'ajout de données dans un fichier texte dans MySQL?

AlfaCoding:

J'ai créé la procédure suivante que l'aide de deux instructions préparées différentes, écrit des données dans un fichier texte avec le même nom.

PROCÉDURE

delimiter !!
drop procedure if exists copyIntoFile !!
create procedure copyIntoFile()

begin
    declare path varchar(255);
    set path = concat("'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/", curdate(), ".txt'");

    set @aux1 = concat("select * from movie_modification where modified = true into outfile ", path, 
                        " fields terminated by ';' lines starting by 'Edit: ' terminated by '\n';");
    prepare stmt1 from @aux1;
    execute stmt1;
    deallocate prepare stmt1;

    set @aux2 = concat("select * from movie_modification where modified = false into outfile ", path, 
                        " fields terminated by ';' lines starting by 'New: ' terminated by '\n';");
    prepare stmt2 from @aux2;
    execute stmt2;
    deallocate prepare stmt2;

    delete from movie_modification;
end !!
delimiter ;

Quand j'exécuté cette procédure, déclaration aux1exécute correctement et crée le fichier texte et écrit les données qu'il contient . Mais lorsque l'exécution va à la deuxième déclaration ( aux2), je reçois l'erreur suivante:

Erreur de code: 1086. Fichier 'C: / ProgramData / MySQL / MySQL 5.7 / uploads / 2020-04-03.txt' existe déjà

Cette erreur se produit car le fichier est déjà en cours de création dans la déclaration aux1.

Comment puis - je modifier alors la deuxième déclaration aux2connaître le dossier , il a déjà été créé?

RiggsFolly:

Je ne pense pas que vous pouvez demander à MySQL pour ajouter au même fichier, mais vous pouvez les 2 requêtes UNION.

Vous pouvez ajouter 'Edit: 'et 'New: 'dans la requête, donc vous permettant d'utiliser une UNION pour réduire à une requête.

Vous devrez peut-être modifier votre requête pour spécifier toutes les colonnes que vous voulez un SELECT 'Edit: ',*travail de coutume, mais voici une suggestion.

delimiter !!
drop procedure if exists copyIntoFile !!
create procedure copyIntoFile()

begin
    declare path varchar(255);
    set path = concat("'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/", curdate(), ".txt'");

    set @aux = concat("select 'Edit: ', col1,col2 from movie_modification where modified = true
                    UNION ALL
                    select 'New: ', col1,col2 from movie_modification where modified = false
                 into outfile ", path, 
                 " fields terminated by ';' lines terminated by '\n';");

    prepare stmt from @aux;
    execute stmt;

    deallocate prepare stmt;
    delete from movie_modification;
end !!
delimiter ;

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=402233&siteId=1
conseillé
Classement