MySQL循环语句在具有INTO OUTFILE唯一名称的列上

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

我有一个几乎没有表的数据库,但我们对其中两个非常感兴趣。在第一个示例中,我有分配了id的数据。在第二节中,我选择了id。 我要做的是在循环中运行一条语句,根据提供给该语句的条件,从第一个表中选择我感兴趣的内容。现在我想循环语句,以便在每次调用中,条件都是来自第二个表的id。此外,我希望将结果保存到文件中,文件名与调用的id对应。 到目前为止,我有:

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(准备好的语句)。谢谢,这就解决了问题