您的位置:首页 > 其它

多用户表空间下统计各表数据量

2016-07-29 00:00 239 查看
--当前是在sinobnet账号下
FOR SYSAREA IN(SELECT *  FROM sinobnet.SYS_AREA A WHERE LOWER(A.PUBLISHDB)=LOWER(SERVICE)  ORDER BY AREACODE ASC) LOOP

dbms_output.put_line(SYSAREA.areacode||SYSAREA.AREANAME);
--先删除指定日期的当前统计数据
DELETE FROM TABLE_COUNT TC WHERE TC.OP_DATE=P_STATDATE AND TC.NAME=SYSAREA.USERNAME;
FOR TN IN (SELECT table_name FROM all_tables where owner=upper(SYSAREA.USERNAME)) loop
--dbms_output.put_line(TN.TABLE_NAME);
execute immediate 'SELECT COUNT(*) FROM '||SYSAREA.USERNAME||'.'||TN.TABLE_NAME INTO TABLE_COU;

insert into table_count
(
id,
op_date,
table_count,
table_name,
create_date,
service,
name
)
values
(
table_count_seq.nextval,
trunc(P_STATDATE),
TABLE_COU,
TN.TABLE_NAME,
SYSDATE,
LOWER(SERVICE),
SYSAREA.username
);

end loop;

COMMIT;

end loop;


最重要的是当前的账号,能访问当前实例下的所有用户表空间。有权限才能查询

重要知识点:

1、获取某个账号下所有的表 select table_name from all_tables where owner=upper('表名')

2、隐式游标 for x in (select * from 表名) loop

3、execute immediate 语句拼装执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: