统计各表记录数

一个简单的存储过程,可以统计各表记录数,有兴趣的不妨用一下

CREATE OR REPLACE PROCEDURE PUB_COUNT_NUM(p_表名 CHAR DEFAULT '%') IS

/********************************************************************
  过程名称:PUB_COUNT_NUM
  功能:统计用户下表的记录数
  说明:
     1.用SELECT COUNT(1)比SELECT COUNT(*)有效,SELECT COUNT(*)会去判断
      某一行是否空。
     2.在SQL Plus 下执行时注意设置:SET SERVEROUTPUT ON,否则看不到
       输出结果。
     3.只想统计某类表时,可以在参数中加调用参数,比如'log%',缺省情况
       统计所有表
     4.调用案例:
        SQL> SET SERVEROUTPUT ON
        SQL> EXEC PUB_COUNT_NUM;  (显示所有表)
        SQL> EXEC PUB_COUNT_NUM('log%'); (显示表名是log开头的表的记录数)   
      
  修改记录:
      2004.02.13  葛长伟  创建
********************************************************************/
  
  CURSOR c_tables IS
    SELECT TABLE_NAME
    FROM USER_TABLES
    WHERE TABLE_NAME LIKE UPPER(p_表名);
  
  v_SQL         VARCHAR2(300);  
  v_记录数      NUMBER(10) := 0;
  v_总记录数    NUMBER(10) := 0;
BEGIN
  /* 设置输出缓冲区大小,以免溢出 */
  DBMS_OUTPUT.ENABLE(40000);
  
  /* 依次输出各表记录数 */
  FOR v_tab IN c_tables LOOP
    v_SQL := 'SELECT COUNT(1) FROM '||v_tab.TABLE_NAME;
    EXECUTE IMMEDIATE v_SQL INTO v_记录数;
    DBMS_OUTPUT.PUT_LINE(RPAD(v_tab.TABLE_NAME,30,' ')||'  记录数:'||TO_CHAR(v_记录数));
   
    v_总记录数 := v_总记录数 + v_记录数;
  
  END LOOP;
  
  /* 输出总记录数 */
  DBMS_OUTPUT.PUT_LINE(CHR(10));
  DBMS_OUTPUT.PUT_LINE('总记录数:'||TO_CHAR(v_总记录数));
  
  
END PUB_COUNT_NUM;
.




用以下命令可以将表有表的信息全列出来,到sqlplus 里直接执行即可
 SELECT 'SELECT ''' ||TABLE_NAME||''',COUNT(*)  FROM '||TABLE_NAME||';' FROM USER_TABLES;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21907916/viewspace-713545/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21907916/viewspace-713545/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值