我有一张包含培训记录的表格。每条记录都有一个带有代理值的字段。我有另一张只是代理价值的表格。我想将记录导出到每个机构的 CSV 文件中。有超过 200 万条记录,所以我不想导出整个表并手动执行。
我创建了一个存储过程,它使用游标从 Agency_codes 表中提取一个值,并将该值用于WHERE子句的 select 语句和INTO OUTFILE名称的一部分。
该过程有效,但仅适用于 Agency_codes 表中的前两个值。在第三个(ACB)值上,它在“where 子句”中给出错误未知列“ACB”,我很困惑为什么它与前两个值一起工作,然后在第三个值上停止。
这是程序:
DELIMITER $$
DROP PROCEDURE IF EXISTS export_csv $$
CREATE PROCEDURE export_csv()
BEGIN
DECLARE agency_name VARCHAR(255);
DECLARE exit_loop BOOLEAN;
DECLARE agency_cursor CURSOR FOR
SELECT agency FROM agency_codes;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
OPEN agency_cursor;
agency_loop: LOOP
FETCH agency_cursor INTO agency_name;
SET @sql_text = Concat("(select 'class_code','course_code','course_name','course_type','username','grade_type','score','letter_grade','is_passed','completion_date','completion_status','registration_date','registration_entry_status','registration_type','comment','first_name','last_name','class_name','agency') Union (select class_code,course_code,course_name,course_type,username,grade_type,score,letter_grade,is_passed,completion_date,completion_status,registration_date,registration_entry_status,registration_type,comment,first_name,last_name,class_name,agency from hrdis_oru where hrdis_oru.agency =", agency_name," into outfile 'C:/HDD/",agency_name,".csv' fields enclosed by '\"' terminated by ',' escaped by '\"' lines terminated by '\r\n')");
prepare s1 from @sql_text;
execute s1;
deallocate prepare s1;
IF exit_loop THEN
CLOSE agency_cursor;
LEAVE agency_loop;
END IF;
END LOOP agency_loop;
END $$
DELIMITER ;
我的代理表中的前几个值是:
- 17
- 303
- ACB
- 精算师
- 农业
- 目标
任何帮助都会很棒。谢谢。