Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 针对oracle 11g的所有架构的所有记录计数_Sql_Oracle_Plsql_Count - Fatal编程技术网

Sql 针对oracle 11g的所有架构的所有记录计数

Sql 针对oracle 11g的所有架构的所有记录计数,sql,oracle,plsql,count,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 ('S

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

 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行 94200000-“表或视图不存在” *原因:
*行动:

提前感谢您的宝贵回复

只需替换为,因为您只能查询当前架构的表,而不需要架构前缀。因此,由于您的模式不拥有这样的表,所以出现了问题

编辑(在注释之后)如果您想通过数据库获取所有表的计数,您需要以超级用户身份登录,例如
SYS
SYSTEM
,并将SQL字符串转换为

从“|r.owner | |”中选择计数(*)。|r.table_名称

然后再次运行脚本。

只需替换为,因为您只能查询当前架构的表,而不需要架构前缀。因此,由于您的模式不拥有这样的表,所以出现了问题

编辑(在注释之后)如果您想通过数据库获取所有表的计数,您需要以超级用户身份登录,例如
SYS
SYSTEM
,并将SQL字符串转换为

从“|r.owner | |”中选择计数(*)。|r.table_名称


然后再次运行您的脚本。

更改您的execute immediate语句,如下所示,它应该可以工作

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

将execute immediate语句更改如下,它应该可以工作

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

我的数据库中有240个架构,希望通过一次查询获取所有架构的计数。一次查询或一个过程?我的数据库中有240个架构,希望通过一次查询获取所有架构的计数。一次查询或一个过程?不,它不起作用,则登录用户无权访问该所有者模式。。。。获取该用户的访问权限,或拥有类似用户的应用程序,整个访问权限的系统管理员否它不起作用则登录用户无权访问该所有者架构。。。。为用户获取访问权限,或让类似用户的应用程序、系统管理员获取整个访问权限当您达到12c时,您可以使用DBA_用户中的ORACLE_维护列。在此之前,用户ID可能会给出一个线索,假设系统用户是在普通用户之前创建的,因此应该有一个较低的数字(尽管升级可能会影响这一点,所以请仔细检查)。当您达到12c时,您可以使用DBA_用户中的ORACLE_维护列。在此之前,用户ID可能会给出一个线索,假设系统用户是在普通用户之前创建的,因此应该有一个较低的数字(尽管升级可能会影响这一点,所以请仔细检查)。