当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

查看oracle数据库用户下的所有空表

今天在群里有人问如何查看某个用户下的所有空表,有人回答是写PL/SQL,如下

SQL> DECLARE
  2  v_table tabs.table_name%TYPE;
  3  v_sql VARCHAR2(888);
  4  v_q NUMBER;
  5  CURSOR c1 IS
  6  SELECT table_name tn FROM tabs;
  7  TYPE c IS REF CURSOR;
  8  c2 c;
  9  BEGIN
 10  DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');
 11  FOR r1 IN c1 LOOP
 12  v_table :=r1.tn;
 13  v_sql :='SELECT count(*) q FROM '||v_table||' where rownum = 1';
 14  OPEN c2 FOR v_sql;
 15  LOOP
 16  FETCH c2 INTO v_q;
 17  EXIT WHEN c2%NOTFOUND;
 18  IF v_q=0 THEN
 19  DBMS_OUTPUT.PUT_LINE(v_table);
 20  END IF;
 21  END LOOP;
 22  CLOSE c2;
 23  END LOOP;
 24  EXCEPTION
 25  WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');
 26  END;
 27  /
PL/SQL 过程已成功完成。
SQL> set serveroutput on
SQL> /
以下为空数据表的表名:
T_FILE_INFO_RAW
T_DOSSIER_INFO_RAW
T_FONDS_INFO_RAW

其实不用那么麻烦,而且表如果很多的话,执行会很慢
先收集下用户的信息

SQL> exec dbms_stats.gather_schema_stats(user);

PL/SQL 过程已成功完成。

SQL> select table_name,num_rows from user_tables where num_rows=0;

TABLE_NAME           NUM_ROWS
-------------------- ----------
T_FILE_INFO_RAW      0
T_DOSSIER_INFO_RAW   0
T_FONDS_INFO_RAW     0

验证是否准确

SQL> select count(*) from T_FILE_INFO_RAW;

  COUNT(*)
----------
         0

SQL> select count(*) from T_DOSSIER_INFO_RAW;

  COUNT(*)
----------
         0

SQL> select count(*) from T_FONDS_INFO_RAW;

  COUNT(*)
----------
         0

向T_FONDS_INFO_RAW表里插入些数据,在验证下

SQL> insert into T_FONDS_INFO_RAW (FILE_SUM) values(1111);

已创建 1 行。
SQL> insert into T_FONDS_INFO_RAW select * from T_FONDS_INFO_RAW;

已创建 1 行。

SQL> /

已创建2行。

SQL> /

已创建4行。

SQL> commit;

提交完成。
SQL> exec dbms_stats.gather_schema_stats(user);

PL/SQL 过程已成功完成。
SQL> select table_name,num_rows from user_tables;

TABLE_NAME             NUM_ROWS
-------------------- ----------
T_FILE_INFO_RAW               0
T_DOSSIER_INFO_RAW            0
T_FONDS_INFO_RAW            8
SQL> select count(*) from T_FONDS_INFO_RAW;

  COUNT(*)
----------
         8

这种方法比起写PL/SQL要方便得多。

本文固定链接: https://www.dbdream.com.cn/2011/09/%e6%9f%a5%e7%9c%8boracle%e6%95%b0%e6%8d%ae%e5%ba%93%e7%94%a8%e6%88%b7%e4%b8%8b%e7%9a%84%e6%89%80%e6%9c%89%e7%a9%ba%e8%a1%a8/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2011年09月20日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 查看oracle数据库用户下的所有空表 | 信春哥,系统稳,闭眼上线不回滚!
关键字:

查看oracle数据库用户下的所有空表:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter