所有记录都针对oracle 11g的所有模式

时间:2019-04-22 05:37:49

标签: sql oracle plsql count

我想计算用户定义模式中所有表的行数。我有与特定架构计数相关的解决方案。但我想得到以下输出

 TABLE_NAME   SCHEMA_NAME   ROW_COUNT

主要问题是仅所有用户定义的架构。我无法弄清楚如何识别用户模式还是系统模式。此外,当我执行以下脚本

declare
    v_count integer;
begin

    for r in (select table_name, owner from all_tables where owner not in ('SYS','SYSTEM','OUTLN','DBSNMP','APPQOSSYS','WMSYS','CTXSYS','XDB' ) )
    loop
        execute immediate 'select count(*) from ' || r.table_name 
            into v_count;


            DBMS_OUTPUT.PUT_LINE(r.table_name ||v_Count);
        INSERT INTO STATS_TABLE(TABLE_NAME,SCHEMA_NAME,RECORD_COUNT)
        VALUES (r.table_name,r.owner,v_count);
    end loop;

end;

但是它返回以下错误

  

错误报告-ORA-00942:表或视图不存在ORA-06512:在   7号线   00942. 00000-“表或视图不存在”   *原因:
  *动作:

预先感谢您宝贵的回应。

2 个答案:

答案 0 :(得分:1)

只需将all_tables替换为user_tables,因为您只能查询没有模式前缀的当前模式的表。因此,由于您的模式不拥有此类表,因此出现了问题。

编辑 (在注释后) :如果要通过数据库获取所有表的计数,则需要以SYSSYSTEM之类的超级用户,然后将您的SQL字符串转换为

'select count(*) from '|| r.owner||'.'||r.table_name

然后再次运行脚本。

答案 1 :(得分:1)

按如下所示更改您的立即执行语句

  execute immediate 'select count(*) from '||r.owner||'.'|| r.table_name 
            into v_count;