java_my_love 2011-10-14 11:13
浏览 1414
已采纳

存储过程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;

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 我用C语言easyx图形库绘制了一个3d游戏方框透视,但进入游戏时候鼠标准星对准方框边缘 鼠标光标就会弹出来这是啥情况怎样让光标对准绘制的方框点击鼠标不弹出光标好烦这样
  • ¥20 用Power Query整合的问题
  • ¥20 基于python进行多背包问题的多值编码
  • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
  • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
  • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
  • ¥15 C语言:数据子序列基础版
  • ¥20 powerbulider 导入excel文件,显示不完整
  • ¥15 用keil调试程序保证结果进行led相关闪烁
  • ¥15 paddle训练自己的数据loss降不下去