java_my_love
2011-10-14 11:13
浏览 1.3k

存储过程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 貌似不能为变量啊
请教各位大仙如何解决,分比较少,见谅

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • iteye_8576 2011-10-14 15:55
    已采纳

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

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

    已采纳该答案
    打赏 评论
  • AngelAndAngel 2011-10-14 11:18

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

    打赏 评论
  • iteye_8576 2011-10-14 12:37

    你执行的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]

    打赏 评论
  • iteye_8576 2011-10-14 15:09

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

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

    打赏 评论

相关推荐 更多相似问题