1. 今天写代码发现这个问题,这里记录一下, 不一致的原因是因为 dba_tables 、all_tables、user_tables 不是实时的反应表的数据的,所以需要在查询统计之前对表进行手动分析,步骤如下
第一步:
create or replace function count_rows(table_name in varchar2,owner in varchar2 default null) return number authid current_user IS num_rows number; stmt varchar2(2000); begin if owner is null then stmt := 'select count(*) from "' || table_name || '"'; else stmt := 'select count(*) from "' || owner || '"."' || table_name || '"'; end if; execute immediate stmt into num_rows; return num_rows; end;
第二步:
analyze table 表名 compute statistics; // 如果有多个表,那么就要把此语音复制为多个,修改一下表名执行一下。
这就可以了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步