Проблема с созданием и добавлением данных в текстовый файл в MySQL? - PullRequest
1 голос
/ 03 апреля 2020

Я создал следующую процедуру, которая с использованием двух разных подготовленных операторов записывает некоторые данные в текстовый файл с одинаковым именем.

ПРОЦЕДУРА

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 ;

Когда я выполнил эту процедуру, оператор aux1 выполняется правильно, создает текстовый файл и записывает в него данные. Но когда выполнение переходит ко второму оператору (aux2), я получаю следующую ошибку:

Код ошибки: 1086. Файл 'C: / ProgramData / MySQL / MySQL Server 5.7 / Uploads / 2020-04-03.txt 'уже существует

Эта ошибка возникает из-за того, что файл уже создается в операторе aux1.

Как я могу затем изменить второе утверждение aux2 зная файл, он уже был создан?

1 Ответ

4 голосов
/ 03 апреля 2020

Я не думаю, что вы можете попросить MySQL добавить к тому же файлу, но вы можете объединить 2 запроса.

Вы можете добавить 'Edit: ' и 'New: ' в запрос, что позволяет вам нужно использовать UNION, чтобы сократить это до одного запроса.

Возможно, вам придется изменить свой запрос, чтобы указать все столбцы, которые вы хотите, чтобы SELECT 'Edit: ',* не работал, но вот предложение.

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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...