oracle 数据库下所有表结构、数据量及缺失值统计

摘要:
select*fromall_ tab_ Columns--查询所有用户表的列名和其他信息。

查用户表

select * from all_tab_comments   --查询所有用户的表,视图等。
select * from all_col_comments   --查询所有用户的表的列名和注释。
select * from all_tab_columns    --查询所有用户的表的列名等信息。

select * from user_tab_comments   --查询本用户的表,视图等。
select * from user_col_comments   --查询本用户的表的列名和注释。
select * from user_tab_columns    --查询本用户的表的列名等信息。

select * from all_tab_partitions
select * from user_tab_partitions

--ORACLE下有三个视图
DBA_TABLES       --拥有DBA角色的用户可以查看系统中的所有表
USER_TABLES      --登录数据库的当前用户拥有的所有表
ALL_TABLES       --登录数据库的当前用户有权限查看的所有表

表结构

SELECT
    t1.TABLE_NAME,
    t1.COLUMN_NAME,
    t1.DATA_TYPE || '(' || t1.DATA_LENGTH || ')',
    t2.COMMENTS
    -- missing_count(t1.TABLE_NAME, t1.COLUMN_NAME) counts
FROM
    USER_TAB_COLS t1, USER_COL_COMMENTS t2
WHERE
    t1.TABLE_NAME = t2.TABLE_NAME
    AND t1.COLUMN_NAME = t2.COLUMN_NAME
ORDER BY
    t1.TABLE_NAME, t1.COLUMN_NAME

参考资料:oracle数据库导出所有表结构

数据量

直接执行下面代码

select t.table_name, t.num_rows from user_tables t

如果上述代码无法得到结果,或数据不全,可执行下述代码

-- 新建函数
create or replace function count_rows(table_name in varchar2,
                                                        owner         in varchar2 default null)
  return number authid current_user IS
    num_rows number;
    stmt     varchar2(2000);
begin
    if owner is null then
        stmt := 'select count(*) from "' || table_name || '"';
    else
        stmt := 'select count(*) from "' || owner || '"."' || table_name || '"';
    end if;

    execute immediate stmt into num_rows;
    return num_rows;
end; 

-- 查询
select table_name, count_rows(table_name) nrows from user_tables

参考资料:Oracle查询数据库中所有表的记录数

缺失值统计

经测试,未建立索引时,5000万数据量,使用sum(decode())用时82s,而使用count where用时105s,显然,sum(decode()) 效率更高;建立索引之后,前者用时7.57s,后者用时8.564s,此时count where效率更高。综合来看,推荐使用sum(decode()).

-- 缺失值统计函数
create or replace function missing_count(table_name in varchar2,
										 col_name in varchar2,
                                         owner      in varchar2 default null)
  return number authid current_user IS
    counts number;
    stmt     varchar2(2000);
begin
    if owner is null then
        stmt := 'select sum(decode(' || col_name || ', null, 1, 0)) from ' || table_name;
        --stmt := 'select count(*) from ' || table_name || ' where ' || col_name || ' is null';
    else
        stmt := 'select sum(decode(' || col_name || ', null, 1, 0)) from ' || owner || '.' || table_name;
        --stmt := 'select count(*) from ' || owner || '.' || table_name || ' where ' || col_name || ' is null';
    end if;
 
    execute immediate stmt into counts;
    return counts;
end;

-- 应用见-表结构

参考链接:python 连接 oracle 统计指定表格所有字段的缺失值数

免责声明:文章转载自《oracle 数据库下所有表结构、数据量及缺失值统计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iphone 各型号设备的屏幕尺寸cmdb项目实现方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)

Oracle12c中的多宿主选项允许一个容器数据库(CDB)容纳多个独立的可插拔数据库(PDB)。本文将展示如何配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)。1. 配置CDB中的实例参数(ALTER SYSTEM)配置CDB实例参数和配置非CDB实例参数没什么不一样。ALTER SYSTEM命令用来设置初始化参数,而有些数据库配置修改需要...

Oracle数据库 DML语句的介绍与使用(转载)

DML(Data Manipulation Language)数据操纵语言,SQL的分类之一,此外还有DDL(Data Definition Language)数据定义语言和DCL(Data Control Language)数据控制语言。DML包括:INSERT、UPDATE、DELETE。注意,select语句属于DQL(Data Query Lang...

【网络】再谈select, iocp, epoll,kqueue及各种I/O复用机制 && Reactor与Proactor的概念

首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronous I/O (the POSIX aio_functions) blocking I/O这个不用多解释吧...

SQLServer 命令批量删除数据库中指定表(游标循环删除)

DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ONLY FORSELECT name FROM sysobjects WHERE name LIKE 'PUB%' AND type='U'OPEN cur_d...

转:通过 Visual Studio 对 SQL Server 中的存储过程设置断点并调试

‍执行会在断点处暂停,此时,我们可以查看并更改存储过程的参数值,逐步地调试其各条语句,就像我们在步骤1 中所做的那样。   在我们可以对应用程序调用的存储过程进行调试之前,首先要指示ASP.NET web 应用程序与SQL Server 调试器相集成。首先,在 Solution Explorer 中右键单击网站名称(ASPNET_Data_Tutorial...

【Oracle】详解v$session

首先查看一下v$session都存在哪些列 SYS@ORCL>descv$session NameNull?Type ----------------------------------------------------------------------------- SADDRRAW(4) SIDNUMBER SERIAL#NUMBER AUD...