oracle 数据库下所有表结构、数据量及缺失值统计
查用户表
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 数据库下所有表结构、数据量及缺失值统计的更多相关文章
- Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...
- Oracle数据库之创建表结构
Oracle数据库之创建表结构 主键与外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(可以是一个属性,也可以是多个)能唯一标识一条记录,那么该属性组就是主键. 外键:关系型数 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 如何导出远程oracle数据库中的表结构
从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2 ...
- SQL查看数据库中每张表的数据量和总数据量
查看所有表对应的数据量 SELECT a.name AS 表名, MAX(b.rows) AS 记录条数 FROM sys.sysobjects AS a INNER JOIN sys.sysinde ...
- 使用sql developer 导出Oracle数据库中的表结构
MS SQLServer的客户端工具做的的确比较好,直接右键,导出数据库就OK了,而且MS的客户端导出的是xxx.dbf文件,直接附加到别的数据库上就OK了 Oracle的sql developer就 ...
- SQLSERVER:计算数据库中各个表的数据量和每行记录所占用空间
转:http://www.cnblogs.com/lyhabc/p/3828496.html CREATE TABLE #tablespaceinfo ( nameinfo ) , rowsinfo ...
- mysql 查看某个数据库中所有表的数据量
1.登录mysql 2.使用命令:use information_schema; 3.使用命令:select table_name,table_rows from tables where TABLE ...
随机推荐
- Codeforces Global Round 5
传送门 A. Balanced Rating Changes 签到,分正负搞一下就行. B. Balanced Tunnel 题意: 给出\(n\)辆车的进洞顺序和出洞顺序,问有多少量车实现了洞中超车 ...
- request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"
String path = request.getContextPath(); String basePath = request.getScheme()+"://"+reques ...
- SpringCloud单元测试【六】
SpringCloud的单元测试主要是依靠 Mock以及Mockito, 所以我们需要对Mock以及Mockito有一定的认识. 一.为什么要用MockMvc 可能我们在测试控制层的代码都是启动服务器 ...
- linux,xshell命令
一. linux 1.Linux发行版 <1> 常见的发行版本如下: Ubuntu Redhat Fedora openSUSE Linux Mint Debian Manjaro M ...
- [ Python入门教程 ] Python生成随机数模块(random)使用方法
1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...
- 用OC基于数组实现循环队列
一.简言 使用数组实现循环队列时,始终会有一个空余的位置预留着,作为一个判决队列已满的条件(当然也可以采用其他方式).在前面已经用C++介绍了基本的算法,可以去回顾一下https://www.cnbl ...
- ansible命令参数介绍
-m:要执行的模块,默认为command -a:模块的参数 -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置 -k:提示输入ssh登录密码.当使用密码验证的时候用 -s:su ...
- 记一次feign的问题排查(短路、线程池、队列)
https://www.jianshu.com/p/f7fb59f43485 昨天开了一百个线程采用feign去请求第三方项目,结果报错,出现了短路,大概是下面这样的.(feign整合了hystrix ...
- TCP协议 - 面向连接
一.TCP特性概览 1.面向连接 TCP是基于连接进行数据交互,通信双方在进行数据交互之前需要建立连接,该连接也只能用在双方之间进行交互.这点不像UDP中的组播和广播,可以在同一组中多个主机交互数据. ...
- CENTOS 7 升级内核版本(附带升级脚本)
写在前面的话 对于系统而言,除非是那种安全性要求非常高的公司或者经常会有第三方安全机构对其漏洞扫描的才容易涉及到系统的内核升级,比如之前呆过一个公司,因为需要做三级等保的原因,就会涉及到系统扫描,这时 ...