现在需要创建一个视图,用来查询数据表中最近五分钟的数据,
但是数据表的表名不是固定不变的,每15分钟会生成一个新的表
比如
data_11170400 表示11月17日4点0分开始到4点15存储数据用的表。
我希望这个视图能够随时间的不同可以从不同的数据表中查询数据。我现在也做了一些工作。create or replace function getName
return varchar2
as
name varchar2(20);
id number;
begin

select concat(concat('data_',to_char(sysdate,'MMDDHH24')),to_char(trunc(to_number(to_char(sysdate,'MI'))/15)*15,'FM09')) into name from dual;
execute immediate 'create or replace view yang(id) as select r_id from '||name||' where col';
commit;
return name;
end getName;==========SQL> declare 
  2  name varchar2(20);
  3  begin
  4  name:=getName();
  5  dbms_output.put_line(name);
  6  end;
  7  /这样可以成功创建视图,
但是我现在的问题不知道这个视图能不能随着时间的推移而选择不同的数据表查询数据?
如果不能,应该怎么办?

解决方案 »

  1.   

    把你的存储过程放到一个JOB中,每隔一段时间自动执行一次不就好了。
      

  2.   

    视图里面是静态SQL 只要有表名,字段名发生变化就是动态SQL了所以你只能想办法绕过去。方法 1 数据量非常小 ,就建立一张大视图,把所有表的数据装进去,把表名作为一个伪列加进去,这样就可以当参数查询了方法 2 创建任务,定时重建视图,保证重建之后的视图和你的表匹配方法 3 创建任务,定时重建同义词,视图里面用同义词访问表。