mysql - 如何使用声明的变量作为 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
不是变量),我怎样才能让它接受一个变量?
解决方案
你有两个小问题。
首先,您的路径必须是一个字符串,因为您使用双引号,您在开头添加单引号并在路径末尾添加。
另一件事是为您的查询使用准备好的语句
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 ;
推荐阅读
- javascript - 从 JS 对象创建有序 JSON 字符串
- php - Woocommerce 3 中按产品类别计算的自定义购物车项目数
- python - Keras - 查找嵌入
- haskell - 不可判定的函数依赖
- python - Beautifulsoup 无法使用 find_all 找到超过 24 个类
- jquery - jquery:如果当前时间落在从 json 获得的两次之间
- sql - Azure 函数到 Azure SQL - 性能和扩展
- ruby - 无法使用 rbenv 在 Ubuntu 14.04 上将 ruby 安装到 /usr/local
- c - 将指针转换为 intptr_t 并返回
- python - 如何在 Python unittest.TestCase 中添加匹配器