现在我有个一个索引表是这样的
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的个数不定,要根据索引表取。高手救救急啊
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的个数不定,要根据索引表取。高手救救急啊
解决方案 »
- 问下,这句话应该怎么写啊? 在线等!!!!!
- sql语句里能不能使用自己定义的变量吗?为什么呀?
- sql server 中的uniqueidentifier类型在oracle中对应的类型是什么??
- oracle不能启动,总是提示invalid specification for system parameter DISPATHERS
- 郁闷,还是LOGMINER的问题!
- 困扰我好久的问题?
- 高手才能解决的pl/sql的问题,
- occi 创建CreateStatement卡死
- oracle 主从配置
- oracle 查询报错 是什么原因
- 复杂的求和问题!!
- 论坛的各位兄弟姐妹们,你们知道如何把sybase数据库通过OCI移植到oracle数据库中吗?
如果用procedure的话可以达到这种效果吗?
只要能实现这个目的,采用那种手段无所谓。
感谢楼上的!
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;
/
select * from (select TableName from Table_test);
和
select TableName from Table_test
一样[Quote=引用 7 楼 BlueskyWide 的回复:]
try:
select * from (select TableName from Table_test);
select * from (select TableName from Table_test); --是取所有表中的具体记录。
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
/--如果id按序从小到大排列,索引表的名称为Testselect decode(TableName, 'select * from ' || TableName) ||
decode(max(id), ';', 'union')
from Test;
/--在pl/sql或sqlplus中执行完上面的语句后,按回车。
/--如果id按序从小到大排列,索引表的名称为Testselect decode(TableName, 'select * from ' || TableName) ||
decode(max(id), ';', ' union ')
from Test;
/--在pl/sql或sqlplus中执行完上面的语句后,按回车。
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.把上面获取的内容放到你程序中的对应位置.