Oracle:从(选择表名从...的)中选择*?

4

如果有一个查询返回表名,是否可以评估这个名称并在后续查询中使用它?

例如:

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 - Mike Park
那差不多就像魔法一样!不幸的是,我正在尝试获取所选队列表的深度,但它们的num_rows值为null。 - Synesso
1
如果你想把它放在一个选择语句中,那可能会很棘手。 你能不能将它分解成一个循环? - Mike Park
1
这就是我所做的。干杯。 - Synesso
2
当对表进行统计时,all_tables.num_rows 会被填充,因此如果您只想要一个合理的估计值,它可能会很有用。 - Jeffrey Kemp
你能在队列表上强制执行状态收集吗?或者有更简单的方法来获取队列深度吗? - Synesso
2个回答

6
你可以这样做,但需要使用 XML 查询
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_%'

3

尝试使用类似以下的内容

select table_name
into table_name_value
from ALL_TABLES where table_name like 'MY_TABLE_%');

execute immediate 'select count(1) from ' || table_name_value into returned_value;

并将其纳入你的循环中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接