2013-06-05 72 views
2

甲骨文:11g的 操作系統:LinuxOracle模式表的行數

我有這個,我正試圖解決,但沒能得到明確的答案非常棘手的問題... 我做了谷歌搜索...但不是運氣與我的要求...

模式統計不可靠,所以想要查詢dba_tables .. 也不想在數據庫下創建任何程序或功能..只是試圖用簡單的SQL來實現。

問: 如何後臺打印特定模式的所有錶行數並顯示table_name?

A. 我可以很容易地顯示在計數閥芯,但沒能獲得數旁邊的表名..

例如

Table_Name Count 
tab1 200 
tab2 500 
tab3 300 

下面我可以算,但無法弄清楚結果顯示table_name的...

spool runme.sql 

select 'select count(*) from '|| owner || '.' || table_name || ';' 
from dba_tables 
where owner = 'user1' 
order by table_name; 

spool off 

回答

2

您可以使用這樣的功能,但它會很慢:

從這個答案湯姆凱特的網站採取
create or replace 
function get_rows(p_tname in varchar2) return number 
as 
    l_columnValue number default NULL; 
begin 
    execute immediate 
     'select count(*) 
      from ' || p_tname INTO l_columnValue; 

    return l_columnValue; 
end; 
/

select user, table_name, 
     get_rows(user||'.'||table_name) cnt 
    from user_tables 
/

代碼:

http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1660875645686

沒有一個函數調用還可以:

select 
table_name, 
to_number(
    extractvalue(
     xmltype(
     dbms_xmlgen.getxml('select count(*) c from '||table_name)) 
,'/ROWSET/ROW/C')) count 
from user_tables; 

從尖端的位置:

http://laurentschneider.com/wordpress/2007/04/how-do-i-store-the-counts-of-all-tables.html