MySQL 在具有 INTO OUTFILE 唯一名称的列上循环语句
MySQL loop statement over column with INTO OUTFILE unique name
我有一个数据库 table 很少,但我们真的对两个感兴趣。在第一个中,我有分配了 id 的数据。在第二个中,我选择了 id。
我想要做的是 运行 在循环语句中 select 根据提供给语句的条件从第一个 table 开始我感兴趣的内容。现在我想循环语句,所以在每次调用中,条件都是来自第二个 table 的 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 ;
在上面的代码中我需要一种方法来替换 INTO OUTFILE "D:\test.csv" 部分,所以当调用第二个 table 的值时,假设 101、102、103 , 以获取文件 101.csv、102.csv、103.csv。我需要添加什么以及如何调用该循环?
提前致谢!
克里斯
正如 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 ;
我有一个数据库 table 很少,但我们真的对两个感兴趣。在第一个中,我有分配了 id 的数据。在第二个中,我选择了 id。 我想要做的是 运行 在循环语句中 select 根据提供给语句的条件从第一个 table 开始我感兴趣的内容。现在我想循环语句,所以在每次调用中,条件都是来自第二个 table 的 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 ;
在上面的代码中我需要一种方法来替换 INTO OUTFILE "D:\test.csv" 部分,所以当调用第二个 table 的值时,假设 101、102、103 , 以获取文件 101.csv、102.csv、103.csv。我需要添加什么以及如何调用该循环?
提前致谢!
克里斯
正如 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 ;