你的这个表有主键没?
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站设计、黄陵网络推广、小程序设计、黄陵网络营销、黄陵企业策划、黄陵品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供黄陵建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
如果有主键,假设你的这个表的主键是sid
那么可以使用
select count(sid) from tablename
来查询会比你用count(*) 要快的多。使用主键字段会用到主键索引,会比你去扫描整个表要快的多。
oracle 里面统计某个表的数据行的数量只有使用count函数来求。如果数据量非常大你应该考虑把你的历史数据给清理掉或者使用分区表 。
可以从表user_tables中查询。
select
sum(num_rows)
from
user_tables
;
就是显示用户所有表的行数其中num_rows是每个表的行数,用sum加总一下,就是当前用户所有表的
总行
数。
但因为user_tables中的数据不是
实时
统计,会有时间差,所以以上Sql统计得到的结果与实际会存在一定
误差
。
select t.*,rownum rn from table1 t --rownum就是记录所在的行数
你是指定ID去查询,得到的记录只有一条,所以rownum始终是1了,你想要的结果应该是
select tt.*,tt.rn from
(select t.*,row_number() over (order by id) rn from table1 t ) tt
where tt.id = 你要查询的ID值
如何在oracle中查询每个表的记录条数
可用两种方法,一种是在oracle的系统表中统计,另一种需要写存储过程统计,方法分别如下。
1、系统表中统计:
1
SELECT sum(num_rows) FROM user_tables;
结果:
2、存储过程统计,代码如下:
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;
Oracle 动态SQL处理
你可以参考最后那个 test_pro 存储过程, 做一定修改.就可以了.
DBA权限下可以查询dba_tables,里面有个num_rows列
select table_name,num_rows from dba_tables where ...;
条件可以根据自己需要来加
num_rows列并不是实时更新的,1小时更新一次。
扩展资料:
Oracle数据库常用sql语句:
一,INSERT (往数据表里插入记录的语句)
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名;
二,DELETE (删除数据表里记录的语句)
DELETE FROM表名 WHERE 条件;
三,UPDATE (修改数据表里记录的语句)
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;
四,改变表的名称
ALTER TABLE 表名1 TO 表名2;
五,在表的后面增加一个字段
ALTER TABLE表名 ADD 字段名 字段名描述;
六,修改表里字段的定义描述
ALTER TABLE表名 MODIFY字段名 字段名描述;
参考资料:百度百科:Oracle数据库