网站建设资讯

NEWS

网站建设资讯

oracle如何查空表 oracle查询去除空数据

如何查询oracle是否导出空表

1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。

站在用户的角度思考问题,与客户深入沟通,找到锦州网站设计与锦州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、做网站、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖锦州地区。

2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。

在sqlplus中,执行如下命令:

SQLalter system set deferred_segment_creation=false;

查看:

SQLshow parameter deferred_segment_creation;

该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。

3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下:

3.1 使用ALLOCATE EXTENT的说明

使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:

-----------

ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }

-----------

可以针对数据表、索引、物化视图等手工分配Extent。

ALLOCATE EXTENT使用样例:

ALLOCATE EXTENT

ALLOCATE EXTENT(SIZE integer [K | M])

ALLOCATE EXTENT(DATAFILE 'filename')

ALLOCATE EXTENT(INSTANCE integer)

ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')

ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)

针对数据表操作的完整语法如下:

-----------

ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]

-----------

故,需要构建如下样子简单的SQL命令:

-----------

alter table aTabelName allocate extent

-----------

3.2 构建对空表分配空间的SQL命令,

查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:

-----------

SQLselect table_name from user_tables where NUM_ROWS=0;

-----------

根据上述查询,可以构建针对空表分配空间的命令语句,如下:

-----------

SQLSelect 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

-----------

批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:

-----------

set heading off;

set echo off;

set feedback off;

set termout on;

spool C:\allocate.sql;

Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

spool off;

-----------

执行C:\createsql.sql,命令如下:

-----------

SQL@ C:\createsql.sql;

-----------

执行完毕后,得到C:\allocate.sql文件。

打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。

3.4 执行SQL命令,对空表分配空间:

执行C:\allocate.sql,命令如下:

-----------

SQL@ C:\allocate.sql;

-----------

执行完毕,表已更改。

3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。

另外:Oracle11g中,对密码是大小写敏感的,即密码中的字母是区分大小写的。

在Oracle10g中及以前,密码中的字母大小写无所谓。

如何知道oracle数据库哪些表是有数据的?哪些表是空的没有数据?

select * from all_all_tables

这是查询Oracle中的所有的表,包括SYS用户下的,你可以根据表空间和所属用户来限制查询结果

where owenr='' and tablespacename=''

想要查出没数据的话,all_all_tables中有个num_rows字段,记录该表数据是多少行的,rows=‘0’的肯定是没数据的,

select * from all_all_tables

where num_rows='0'

and owenr='所属用户' and tablespacename='所属表空间'

即可。

如何在ORACLE中查询某一用户下所有的空表

先分析表

select 'analyze table '||table_name||' compute statistics;' from user_tables;

把查询结果依次执行

把所有表分析一遍

然后user_tables中就会刷新表的信息

select * from user_tables where num_rows=0;

查出行数为0的表信息.

oracle数据库查询哪张表是空表

可以查数据字典,select * from user_tables where num_rows=0。不过最好对table_name加一些限制避免行数过多。

ORACLE查询空表

MSSQL不知道

oracle在plsql里执行如下代码:

DECLARE

v_table tabs.table_name%TYPE;

v_sql VARCHAR2(888);

v_q NUMBER;

CURSOR c1 IS

SELECT table_name tn FROM tabs;

TYPE c IS REF CURSOR;

c2 c;

BEGIN

DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');

FOR r1 IN c1 LOOP

v_table :=r1.tn;

v_sql :='SELECT COUNT(*) q FROM '||v_table;

OPEN c2 FOR v_sql;

LOOP

FETCH c2 INTO v_q;

EXIT WHEN c2%NOTFOUND;

IF v_q=0 THEN

DBMS_OUTPUT.PUT_LINE(v_table);

END IF;

END LOOP;

CLOSE c2;

END LOOP;

EXCEPTION

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');

END;

然后点output,显示的就是空表

oracle中 查找所有没有数据的表

select 'select count(*) from ' ||table_name||';' from tabs;

把得到的sql语句拷贝出来执行就行了

那你就写个存储过程吧

把上边那句定义成游标,然后挨个执行

执行的表名和count(*)插入到自己定义的表里,自己定义的表两列就够了,一个是table_name ,一列是count


本文标题:oracle如何查空表 oracle查询去除空数据
文章转载:http://njwzjz.com/article/hhccdj.html