存储过程for in loop 问题

create or replace procedure GET_DATA is
yesterday varchar2(2);
tablename varchar2(20);
date varchar(20);
begin
select to_char(sysdate - 1, 'dd') into yesterday from dual;

tablename := '"d_his_fre_data_' || yesterday || '"';

dbms_output.put_line(tablename);

for rec in(select * from [color=red]tablename[/color]) loop
-- insert into aaa values(rec.UID);
date := substr(rec.COLL_TIME,0,9);
-- dbms_output.put_line(substr(rec.COLL_TIME,0,9) || ' ' substr(rec.COLL_TIME,10,17,));
dbms_output.put_line(date);
end loop;
commit;
end GET_DATA;

for in loop中的table 貌似不能为变量啊
请教各位大仙如何解决,分比较少,见谅

看你代码中:
tablename := '"d_his_fre_data_' || yesterday || '"';

你的表都是d_his_fre_data_开头的,以天结尾,你这些表的结构都是一样的吧,如果是一样的,随便定义一个表就行,比如 rec d_his_fre_data_01%ROWTYPE;

呵呵 我以前也尝试过 发觉不行 不光是for 里面不行 你自定义个字符串的字段变量 查询也不行

你执行的sql是动态,不能使用for in ..,可以使用游标变量解决。
[code="sql"]
DECLARE
TYPE cur_type IS REF CURSOR;
cur cur_type;
tb_name VARCHAR2(20);
rec codetable%ROWTYPE;
BEGIN
tb_name := 'codetable';
OPEN cur FOR 'SELECT * FROM ' || tb_name;
LOOP
FETCH cur INTO rec;
EXIT WHEN cur%NOTFOUND;
dbms_output.put_line(rec.code);
END LOOP;
END;
[/code]

codetable是我数据库的表,你数据库里没有,换成你要查询的表,

//定义一个ROWTYPE,类型是codetable的。
rec codetable%ROWTYPE;