【发布时间】:2015-03-04 18:50:44
【问题描述】:
我有一张包含培训记录的表格。每条记录都有一个带有代理值的字段。我有另一张只是代理价值的表格。我想将记录导出到每个机构的 CSV 文件中。有超过 200 万条记录,所以我不想导出整个表并手动执行。
我创建了一个存储过程,它使用游标从 Agency_codes 表中提取一个值,并在 WHERE 子句和部分 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 ;
我的 Agency 表中的前几个值是:
- 17
- 303
- ACB
- 精算师
- 农业
- 目标
任何帮助都会很棒。谢谢。
【问题讨论】:
标签: mysql stored-procedures cursor into-outfile