现在我有个一个索引表是这样的
ID  TableName
1   Tab1
2   Tab2
3   Tab3
......Tab1、Tab2、Tab3.....这些表个结构都是一样的,且可能不断扩充,就是说索引表记录也是不断扩大的。
有没有办法可以根据这个索引表,取出所有的TableName,把这些表用union 拼成一个Viewselect * from Tab1
union
select * from Tab2
union
select * from Tab3
........关键在TableName的个数不定,要根据索引表取。高手救救急啊

解决方案 »

  1.   

    做成VIEW好象不太可能啊,能用过程代替吗
      

  2.   

    我的应用是 用一句最简单的select 从这个视图取数,也就是取出所有Tab里面的数 
    如果用procedure的话可以达到这种效果吗? 
    只要能实现这个目的,采用那种手段无所谓。
    感谢楼上的!
      

  3.   

    楼上的能否详细点,具体如何实现呢?多谢了,我对oracle的pl/sql开发不是很熟,哎
      

  4.   

    declare
      sqlstr varchar2(2000) := '';
    begin
      for c1 in (select tablename from 索引表)
      loop
         sqlstr := sqlstr || ' select * from ' || c1.tablename || ' union';
      end loop;
      sqlstr := rtrim(sqlstr,' union');
      execute immediate sqlstr;
    end;
    /
      

  5.   

    楼上的,这个外部应用怎么用呢?sql语句的方式能够取出记录集吗?因为使用侧的取数方式已经定死了是sql方式,可以实现吗?谢谢这么晚还在热心帮忙!
      

  6.   

    try:
    select * from (select TableName from Table_test);
     
      

  7.   

    select * from (select TableName from Table_test); 

    select TableName from Table_test
    一样[Quote=引用 7 楼 BlueskyWide 的回复:]
    try: 
    select * from (select TableName from Table_test); 
      

  8.   

    select TableName from Table_test     --只是取表名;
    select * from (select TableName from Table_test);   --是取所有表中的具体记录。
      

  9.   

    -- TRY IT .. 把最后的UNION去掉就行。
    SQL> SELECT 'SELECT * FROM '||TABLENAME||' UNION' SQL_STATEMENT
      2    FROM TABLE_NAME TT;SQL_STATEMENT
    ------------------------
    SELECT * FROM TAB1 UNION
    SELECT * FROM TAB2 UNION
    SELECT * FROM TAB3 UNION
      

  10.   

    select decode(TableName,'select * from '||TableName)||decode(max(id),';','union') from test;
      

  11.   


    /--如果id按序从小到大排列,索引表的名称为Testselect decode(TableName, 'select * from ' || TableName) ||
           decode(max(id), ';', 'union')
      from Test;
      
    /--在pl/sql或sqlplus中执行完上面的语句后,按回车。
      

  12.   

    union前后加空格:
    /--如果id按序从小到大排列,索引表的名称为Testselect decode(TableName, 'select * from ' || TableName) ||
           decode(max(id), ';', ' union ')
      from Test;
      
    /--在pl/sql或sqlplus中执行完上面的语句后,按回车。
      

  13.   

    你的这个需求需要分两步完成:
    1.通过如下的方法获取完整sql:
    SELECT 'select * from ' || TABLENAME || DECODE(Z.ID, X.ID, ';', ' union ')
      FROM (SELECT ID, TABLENAME FROM YOURTABLE) Z,
           (SELECT MAX(ID) ID FROM YOURTABLE) X;
    2.把上面获取的内容放到你程序中的对应位置.