orcle中的表按小时生成,如A-2007031400,A-2007031401,...,A-2007031423,A-2007031500,A-2007031501,...,A-2007031523...等,其结构相同,能不能做到用“A”代替访问以“A”开头的表?
如,我只需要 select * from A 就可以访问oracle中以“A”开头的表。

解决方案 »

  1.   

    用select * from A实现访问所有A开头的表么? 
    那怎么输出查询结果啊... 都是A的结果,你怎么清楚是来自哪个表的?
      

  2.   

    建议使用分区表,表名为A,分区字段为A-XXXXXXXXXX
      

  3.   

    select * from A;
    不是用来访问表A中的内容吗?
      

  4.   

    用select * from A实现访问所有A开头的表么? 
    那怎么输出查询结果啊... 都是A的结果,你怎么清楚是来自哪个表的?
    不需要知道来自哪个表?我只是要访问他们的总和,为的就是避免这样:
    select * from A-2007031400
    select * from A-2007031401
    .....
    无数个。
      

  5.   

    建立同义词咯。
    CREATE SYNONYM A FOR A-2007031400



      

  6.   

    SQL> create table A20060101 (id number, name varchar2(20));Table createdSQL> insert into A20060101 values(1, 'A20060101');1 row insertedSQL> create table A20060901 (id number, name varchar2(20));Table createdSQL> insert into A20060901 values(1, 'A20060901');1 row insertedSQL> commit;Commit complete
    SQL> create or replace procedure testpro as
      2  str varchar2(30000);
      3  num number;
      4  begin
      5  execute immediate ' grant create view to db2inst2 '; //db2inst2 is username
      6  str := 'create view A as ';
      7  for y in (select table_name from user_tables where table_name like 'A%')
      8  loop
      9      str := str || 'select * from ' || y.table_name || ' union all ';
     10  end loop;
     11  num := length(str);
     12  str := substr(str, 0, num - 10);
     13  execute immediate str ;
     14  end;
     15  /Procedure created
    SQL> exec testpro;PL/SQL procedure successfully completedSQL> select * from a;        ID NAME
    ---------- --------------------
             1 A20060101
             1 A20060901然后创建一个job,定时执行这个存储过程就可以通过直接防问A来访问A开头的所有表
      

  7.   

    你是想要查出以A开头的表的表名  还是把以A开头所有表的所有记录??说清楚点
    ******************************
    是以A开头所有表的所有记录。
      

  8.   

    xiaoxiao1984(笨猫儿) :表名是每小时动态生成的,总不能每次都建存储过程和视图吧?
      

  9.   

    考虑分区表吧,按照时间分区举例:
    create table test 
     ( 
     id number primary key, 
     name varchar2(20), 
     rq date 
     ) 
     partition by range (rq) 
     ( 
     partition rq_00 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace xy, 
     partition rq_01 values less than('2007-01-01','yyyy-mm-dd') tablespace xy1, 
     partition rq_02 values less than(maxvalue) tablespace xy2 
     )
      

  10.   

    定义一个Job,一定时间段去执行一次testpro就可以了
    不需要再做什么啊
      

  11.   

    首先要说的就是没有很好的方法,从这么多个表中select数据集。
    建议还是使用分区表,按小时增加表不如按小时增加分区。
    建个分区表A,就可直接select * from A;
      

  12.   

    xiaoxiao1984的存储过程能实现
    不过还是建立分区表比较好