2011-03-30 6 views
4

테이블의 이름을 반환하는 쿼리가 제공되면 이름을 평가하고 후속 쿼리에서 사용할 수 있습니까?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

+0

거의 매력처럼 작동했습니다! 불행히도 내가 선택한 큐 테이블의 깊이를 얻으려고 노력하고 있고, 그들은 null로 num_rows 값을 가지고. – Synesso

+1

하나의 select 문에서 원한다면 까다로운 증명해야합니다. 루프로 분해 할 수 있습니까? – climbage

답변

6

당신은 수에

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; 

같은 것을 사용하고 채택하려고 노력하지만, 그것은 당신이 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_%' 
3

는 루프

관련 문제