如何在oracle中查询每个表的记录条数

yanhong430 2008-12-30 02:53:34
要一次查询所有表的记录数啊,请指教!
...全文
5895 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lchfei 2009-03-11
  • 打赏
  • 举报
回复
SELECT MAX(ROWNUM) FROM TBL_A;
lyf_sust 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wfqqwer5213 的回复:]
select t.TABLE_NAME,t.NUM_ROWS from user_tables t
[/Quote]
学习了
conna 2008-12-30
  • 打赏
  • 举报
回复
imp导出,看log文件
很清楚

虽然笨了点
zhangyong369 2008-12-30
  • 打赏
  • 举报
回复
顶 楼上
watson110 2008-12-30
  • 打赏
  • 举报
回复
更正一下:
declare
v_tName varchar(50);
v_sqlanalyze varchar(500);
v_num number;
v_sql varchar(500);
cursor c1
is
select table_name from user_tables;
begin
open c1;
loop
fetch c1 into v_tName;
if c1%found then

v_sqlanalyze :='analyze table '||v_tName||' estimate statistics';
execute immediate v_sqlanalyze;
v_sql := 'select NUM_ROWS from user_tables where table_name =upper('''||v_tName||''')';

execute immediate v_sql into v_num;
dbms_output.put_line('表名: '||v_tName||' 行数: '||v_num);
else
exit;
end if;
end loop;
end;
watson110 2008-12-30
  • 打赏
  • 举报
回复
其实可以这样,先用游标对每个表进行分析,然后再将记录数取出来:
declare
v_tName varchar(50);
v_sqlanalyze varchar(500);
v_num number;
v_sql varchar(500);
cursor c1
is
select table_name from user_tables;
begin
open c1;
loop
fetch c1 into v_tName;
if c1%found then

v_sqlanalyze :='analyze table '||v_tName||' estimate statistics';

v_sql := 'select NUM_ROWS from user_tables where table_name =upper('''||v_tName||''')';

execute immediate v_sql into v_num;
dbms_output.put_line('表名: '||v_tName||' 行数: '||v_num);
else
exit;
end if;
end loop;
end;
xfl039 2008-12-30
  • 打赏
  • 举报
回复
这个简单!不过动态SQL也是一种办法啊[Quote=引用 9 楼 wfqqwer5213 的回复:]
select t.TABLE_NAME,t.NUM_ROWS from user_tables t
[/Quote]
watson110 2008-12-30
  • 打赏
  • 举报
回复
对于楼上要逐个表进行分析吧
wiler 2008-12-30
  • 打赏
  • 举报
回复
analyze table tab_name estimate statistics;
之后可以用
select t.TABLE_NAME,t.NUM_ROWS from user_tables t
查看记录数
watson110 2008-12-30
  • 打赏
  • 举报
回复
declare
v_table varchar(50);
v_num number;
v_sql varchar(500);
cursor c1
is
select table_name from user_tables;
begin
open c1;
loop
fetch c1 into v_table;
if c1%found then
v_sql:='select count(*) from '||v_table||'';
execute immediate v_sql into v_num;
dbms_output.put_line('表:'||v_table||' 行号: '||v_num);
else
exit;
end if;
end loop;
end;
wfqqwer5213 2008-12-30
  • 打赏
  • 举报
回复
select t.TABLE_NAME,t.NUM_ROWS from user_tables t
yanhong430 2008-12-30
  • 打赏
  • 举报
回复
我是在dos黑屏下运行
yanhong430 2008-12-30
  • 打赏
  • 举报
回复
SQL> declare
2 cursor c1 is select tname from tab where tabtype='TABLE';
3 RecordNumber number;
4 begin
5 dbms_output.put_line('TABLE NAME'||' '||'RECORD NUMBER');
6 for mytable in c1 loop
7 execute immediate 'selec count(*) from '||mytable.tname into RecordNumbe
r;
8 dbms_output.put_line(mytable.tname||rpad(' ',20-length(mytable.tname),chr
(32))||RecordNumber);
9 end loop;
10 end;
11 /
TABLE NAME RECORD NUMBER
declare
*
ERROR 位于第 1 行:
ORA-00900: 无效 SQL 语句
ORA-06512: 在line 7


请问lpc19598188,这是怎么回事啊?
又是违规昵称 2008-12-30
  • 打赏
  • 举报
回复
这下终于对齐了

SQL> declare
2 cursor c1 is select tname from tab where tabtype = 'TABLE';
3 RecordNumber number;
4 begin
5 dbms_output.put_line('TABLE NAME'||' '||'RECORD NUMBER');
6 for mytable in c1 loop
7 execute immediate 'select count(*) from '||mytable.tname into RecordNumber;
8 dbms_output.put_line(mytable.tname||rpad(' ',20-length(mytable.tname),chr(32))||RecordNumber);
9 end loop;
10 end;
11 /

TABLE NAME RECORD NUMBER
DEPT 4
EMP 14
BONUS 0
SALGRADE 5
EMP1 16
T1 28671

PL/SQL procedure successfully completed

又是违规昵称 2008-12-30
  • 打赏
  • 举报
回复
搞了个好看点的:


SQL> declare
2 cursor c1 is select tname from tab where tabtype = 'TABLE';
3 RecordNumber number;
4 begin
5 dbms_output.put_line('TABLE NAME'||' '||'RECORD NUMBER');
6 for mytable in c1 loop
7 execute immediate 'select count(*) from '||mytable.tname into RecordNumber;
8 dbms_output.put_line(mytable.tname||lpad(mytable.tname,18,chr(32))||RecordNumber);
9 end loop;
10 end;
11 /

TABLE NAME RECORD NUMBER
DEPT DEPT4
EMP EMP14
BONUS BONUS0
SALGRADE SALGRADE5
EMP1 EMP116
T1 T128671

PL/SQL procedure successfully completed
又是违规昵称 2008-12-30
  • 打赏
  • 举报
回复
执行前在sqlplus里面用个set serveroutput on,
要不看不了回显
又是违规昵称 2008-12-30
  • 打赏
  • 举报
回复
发现pl/sql就行,我自己做的测试


SQL> declare
2 cursor c1 is select tname from tab where tabtype = 'TABLE';
3 RecordNumber number;
4 sqlText varchar(100);
5 begin
6 for mytable in c1 loop
7 execute immediate 'select count(*) from '||mytable.tname into RecordNumber;
8 dbms_output.put_line(mytable.tname||' '||RecordNumber);
9 end loop;
10 end;
11 /

DEPT 4
EMP 14
BONUS 0
SALGRADE 5
EMP1 16
T1 28671

PL/SQL procedure successfully completed


原代码也发一个,免得你去行号:
declare
cursor c1 is select tname from tab where tabtype = 'TABLE';
RecordNumber number;
sqlText varchar(100);
begin
for mytable in c1 loop
execute immediate 'select count(*) from '||mytable.tname into RecordNumber;
dbms_output.put_line(mytable.tname||' '||RecordNumber);
end loop;
end;

列没对齐,你就自己想办法吧
yanhong430 2008-12-30
  • 打赏
  • 举报
回复
单条select语句查询不了吗?
又是违规昵称 2008-12-30
  • 打赏
  • 举报
回复
写个存储过程就行,稍后贴出来

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧