MySQL循环语句在具有INTO OUTFILE唯一名称的列上
我有一个几乎没有表的数据库,但我们对其中两个非常感兴趣。在第一个示例中,我有分配了id的数据。在第二节中,我选择了id。 我要做的是在循环中运行一条语句,根据提供给该语句的条件,从第一个表中选择我感兴趣的内容。现在我想循环语句,以便在每次调用中,条件都是来自第二个表的id。此外,我希望将结果保存到文件中,文件名与调用的id对应。 到目前为止,我有:MySQL循环语句在具有INTO OUTFILE唯一名称的列上,mysql,loops,stored-procedures,into-outfile,Mysql,Loops,Stored Procedures,Into Outfile,我有一个几乎没有表的数据库,但我们对其中两个非常感兴趣。在第一个示例中,我有分配了id的数据。在第二节中,我选择了id。 我要做的是在循环中运行一条语句,根据提供给该语句的条件,从第一个表中选择我感兴趣的内容。现在我想循环语句,以便在每次调用中,条件都是来自第二个表的id。此外,我希望将结果保存到文件中,文件名与调用的id对应。 到目前为止,我有: DELIMITER $$ CREATE PROCEDURE generateData( IN idNumber INT ) BEGIN
DELIMITER $$
CREATE PROCEDURE generateData(
IN idNumber INT
)
BEGIN
SELECT
id,
name,
d_year,
d_month,
d_day,
d_value
FROM d_dataframe
WHERE
id = idNumber
INTO OUTFILE "D:\\test.csv"
CHARACTER SET utf-8
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
END $$
DELIMITER ;
在上面的代码中,我需要一种替换为OUTFILE“D:\test.csv”部分的方法,因此当调用第二个表中的值时,比如101、102、103,以获取文件101.csv、102.csv、103.csv。我需要添加什么以及如何调用该循环
提前谢谢
Chris正如Akina所说,使用事先准备好的陈述
DELIMITER $$
CREATE PROCEDURE generateData(
IN idNumber INT
)
BEGIN
SET @sql = CONCAT('
SELECT
id,
name,
d_year,
d_month,
d_day,
d_value
FROM d_dataframe
WHERE
id = ',idNumber,'
INTO OUTFILE "D:\\test',idNumber,'.csv"
CHARACTER SET utf8
FIELDS TERMINATED BY \';\'
ENCLOSED BY \'\\"\'
LINES TERMINATED BY \'\\r\\n\';');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END $$
DELIMITER ;
使用动态SQL(准备好的语句)。谢谢,这就解决了问题