Oracle:select * from(select table_name from ...)?

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_%'); 

显然这是无效的语法,但它应该说明我正在尝试做什么。

+1

我不认为这是可能的一个选择语句。但是,如果你只想计算每个表的行数:'ALL_TABLES.NUM_ROWS'。 – climbage 2011-03-30 23:34:05

+0

这几乎就像一个魅力!不幸的是,我试图获得选定队列表的深度,并且它们的num_rows值为null。 – Synesso 2011-03-30 23:46:29

+1

是的,如果你想在一个select语句中使用它,那应该会很棘手。你能不能把它分解成一个循环? – climbage 2011-03-30 23:54:19

你可以,但它需要你求助于一个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_%' 

尝试使用类似

​​

,并通过它进入你的循环