重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先分析表
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、虚拟主机、营销软件、网站建设、平利网站维护、网站推广。
select 'analyze table '||table_name||' compute statistics;' from user_tables;
把查询结果依次执行
把所有表分析一遍
然后user_tables中就会刷新表的信息
select * from user_tables where num_rows=0;
查出行数为0的表信息.
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='所属表空间'
即可。
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,显示的就是空表
select 'select count(*) from ' ||table_name||';' from tabs;
把得到的sql语句拷贝出来执行就行了
那你就写个存储过程吧
把上边那句定义成游标,然后挨个执行
执行的表名和count(*)插入到自己定义的表里,自己定义的表两列就够了,一个是table_name ,一列是count
可以查数据字典,select * from user_tables where num_rows=0。不过最好对table_name加一些限制避免行数过多。