重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
需要用count函数来实现。
创新互联公司是一家专业提供益阳企业网站建设,专注与成都网站设计、成都做网站、html5、小程序制作等业务。10年已为益阳众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
如test表中有如下数据:
现要查询每个deptno下的人数,可用如下语句:
select deptno,count(*) from emp group by deptno;
查询结果:
可以通过district来取出字段,之后通过count计算总数量。
sql:select count(district id) from tablename;
如果id字段没有空值的话,可以通过count统计字段的总数量(字段内容可能重复)。
sql:select count(id) from tablename;
select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; 查看你能管理的所有用户!
select * from user_users; 查看当前用户信息 !
-- 查询你 当前用户下,有哪些表
SELECT * FROM user_tables
-- 查询你 当前用户下, 可以访问哪些表 [也就是访问自己 和 其他用户的]
SELECT * FROM all_tables
-- 查询当前数据库所有的表, 需要你有 DBA 的权限
SELECT * FROM dba_tables
1、先查询本库的所有表,测试sql,select * from user_tables t where table_name like 'TEST%';可以看到有多张表;
2、查询一共有几张数据表,
select count(*) from user_tables t where table_name like 'TEST%';
3、编写脚本,查询TEST开头表,每个表的记录数,
declare
v_sql varchar2(200);
v_cnt number(10);
begin
for v_tab in (select table_name from user_tables t where table_name like 'TEST%') loop
v_sql := 'select count(*) from '|| v_tab.table_name;
execute immediate v_sql into v_cnt;
dbms_output.put_line(v_tab.table_name||':'||v_cnt);
end loop;
end;
4、执行该sql,在输出窗口,可以看到每个表的输出结果,
TEST_A:4
TEST_CERTNO:6
TEST_CLASS:4
TEST_COL_1:20
TEST_COL_2:100
TEST_CONNECT:4
TEST_DATE:0
TEST_DATE_1:199
TEST_DATE_2:99
TEST_JOB:6
TEST_LOCK:2
TEST_LOG:999
TEST_MID:328
TEST_SALESSTATISTICS:9999
TEST_STUDENT:6
TEST_SUBSTR:4
TEST_UPDATE:3
TEST_UP_A:6
TEST_UP_B:3
TEST_UP_LIKE:6
CREATE OR REPLACE FUNCTION Get_Record_Count(p_table_name varchar2)
RETURN INT
IS
-- 动态SQL的游标.
v_CursorID INTEGER;
-- 动态执行的SQL语句.
v_sql varchar2(1000);
-- SQL 执行的返回值,可以不理会该数据.
v_Dummy INTEGER;
-- 用于保存读取出来的数据.
v_result INT ;
BEGIN
-- 设置好需要动态执行的 SQL 字符串.
v_sql:=
'SELECT COUNT(1) from ' || p_table_name ;
-- 打开游标.
v_CursorID := DBMS_SQL.OPEN_CURSOR;
-- 分析查询.
DBMS_SQL.PARSE(v_CursorID, v_sql, DBMS_SQL.V7);
-- 定义好要输出的列.
DBMS_SQL.DEFINE_COLUMN(v_CursorID, 1, v_result);
-- 执行动态SQL.
v_Dummy := DBMS_SQL.EXECUTE(v_CursorID);
LOOP
IF DBMS_SQL.FETCH_ROWS(v_CursorID) = 0 THEN
-- 如果没有提取到记录,那么退出循环
EXIT;
END IF;
-- 提取动态SQL执行出来的结果.
DBMS_SQL.COLUMN_VALUE(v_CursorID, 1, v_result);
END LOOP;
-- 关闭游标
DBMS_SQL.CLOSE_CURSOR(v_CursorID);
-- 返回
RETURN v_result;
END ;
/
DECLARE
v_table_index INT;
v_table_name VARCHAR(20);
v_data_count INT;
BEGIN
v_data_count := 0;
FOR v_table_index IN 0..999 LOOP
-- 组合表名
v_table_name := 'message_' || TO_CHAR(v_table_index, '000');
-- 取得记录数
v_data_count := v_data_count + Get_Record_Count();
END LOOP;
-- 输出结果
dbms_output.put_line( TO_CHAR(v_data_count) );
END
没编译 测试 运行 过.