首页 > 解决方案 > 如何使用声明的变量作为 MySQL 中的路径?

问题描述

我正在研究一个在文本文件中插入一些数据的存储过程。

该过程具有以下结构:

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不是变量),我怎样才能让它接受一个变量?

标签: mysqlsqlstored-procedures

解决方案


你有两个小问题。

首先,您的路径必须是一个字符串,因为您使用双引号,您在开头添加单引号并在路径末尾添加。

另一件事是为您的查询使用准备好的语句

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 ;

推荐阅读