我想计算用户定义模式中所有表的行数。我有与特定架构计数相关的解决方案。但我想得到以下输出
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-“表或视图不存在” *原因:
*动作:
预先感谢您宝贵的回应。
答案 0 :(得分:1)
只需将all_tables
替换为user_tables
,因为您只能查询没有模式前缀的当前模式的表。因此,由于您的模式不拥有此类表,因此出现了问题。
编辑 (在注释后) ::如果要通过数据库获取所有表的计数,则需要以SYS
,SYSTEM
之类的超级用户,然后将您的SQL字符串转换为
'select count(*) from '|| r.owner||'.'||r.table_name
然后再次运行脚本。
答案 1 :(得分:1)
按如下所示更改您的立即执行语句
execute immediate 'select count(*) from '||r.owner||'.'|| r.table_name
into v_count;