Oracle:select * from(select table_name from ...)?
问题描述:
给定一个返回表名称的查询,是否可以评估该名称并在随后的查询中使用它?Oracle:select * from(select table_name from ...)?
E.G.
select count(1) from x where x in
(select table_name from ALL_TABLES where table_name like 'MY_TABLE_%');
显然这是无效的语法,但它应该说明我正在尝试做什么。
答
你可以,但它需要你求助于一个XML query。
select
table_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select count(*) c ' ||
' from '||owner||'.'||table_name))
,'/ROWSET/ROW/C')) count
from all_tables
where table_name like 'MY_TABLE_%'
答
尝试使用类似
,并通过它进入你的循环
我不认为这是可能的一个选择语句。但是,如果你只想计算每个表的行数:'ALL_TABLES.NUM_ROWS'。 – climbage 2011-03-30 23:34:05
这几乎就像一个魅力!不幸的是,我试图获得选定队列表的深度,并且它们的num_rows值为null。 – Synesso 2011-03-30 23:46:29
是的,如果你想在一个select语句中使用它,那应该会很棘手。你能不能把它分解成一个循环? – climbage 2011-03-30 23:54:19