Как использовать объявленную переменную в качестве пути в MySQL? - PullRequest
1 голос
/ 03 апреля 2020

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

Процедура имеет следующую структуру:

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

begin

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

    select * from movie_modification where modified = true
    into outfile path;   //<-- This return an error

end !!
delimiter ;

Как видите, я объявил путь вместо того, чтобы просто написать его рядом с into outfile, потому что путь должен быть назван в качестве текущей даты, и для этого я использую функцию curdate() в объявлении path.

В качестве формата, который я написал для select into outfile неверно (ожидается, что text не является переменной), как я могу сделать так, чтобы он принимал переменную?

1 Ответ

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

У вас есть две небольшие проблемы.

сначала ваш путь должен быть строкой, так как вы используете двойные кавычки, которые вы добавляете в начале одинарной кавычки и в конце пути.

Другое дело использовать готовые материалы для вашего запроса

DELIMITER $$
DROP PROCEDURE IF EXISTS insertIntoFile§§
CREATE DEFINER=`root`@`localhost` PROCEDURE `insertIntoFile`()
BEGIN

    DECLARE path VARCHAR(255);
    SET path = CONCAT("'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/", curdate(), ".txt;'");

    SET @sql = CONCAT('select * from movie_modification where modified = true
    into outfile ',path);  

PREPARE test FROM @sql;
EXECUTE test;

end$$
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...