2011-03-30 202 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 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

回答

6

你可以,但它需要你求助於一個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

嘗試使用類似

​​

,並通過它進入你的循環

相關問題