一个简单的存储过程,可以统计各表记录数,有兴趣的不妨用一下
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/