Oracle Schema表行数

时间:2013-06-05 14:20:30

标签: sql linux oracle11g count row

甲骨文:11克 操作系统:Linux

我有这个非常棘手的问题,我试图解决但却无法得到明确的答案...... 我确实搜索了谷歌等等,但没有按照我的要求运气......

架构统计信息不可靠,因此要查询dba_tables .. 也不想在数据库下创建任何过程或函数。只是试图用简单的SQL实现。

Q值。 如何假脱特定模式的所有表行数并显示table_name?

一个。 我可以在假脱机中轻松显示计数但不能在计数旁边获取表名。

e.g。

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

1 个答案:

答案 0 :(得分: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
/

Tom Kyte网站上的答案代码:

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