如何使用声明的变量作为 MySQL 中的路径?

Posted

技术标签:

【中文标题】如何使用声明的变量作为 MySQL 中的路径?【英文标题】:How to use a declared variable as a path in MySQL? 【发布时间】:2020-04-02 21:11:59 【问题描述】:

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

程序结构如下:

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 旁边,因为路径必须命名为当前日期,并且我在path 声明中使用curdate() 函数。

由于我为 select into outfile 编写的格式是错误的(它需要 text 不是变量),我怎样才能使它接受变量?

【问题讨论】:

【参考方案1】:

你有两个小问题。

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

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

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 ;

【讨论】:

我不知道prepared statements是什么,现在我知道了,谢谢!

以上是关于如何使用声明的变量作为 MySQL 中的路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何声明静态变量作为硬编码内存地址的引用?

如何在 MySQL 中声明一个变量?

如何释放直接作为数组获取并存储在变量中的 mysql 结果?

如何将 MySQL 表列作为变量放在 <script> 中?

如何使用现有列中的变量创建数据框作为使用 python 的列?

资产声明中的变量