感谢您阅读并愿意帮助我。我基本上是一名 Java 开发人员,对 Oracle 分析方面的知识较少。
存在一种物化视图,它会生成每日持有的客户单位,随着时间的推移,这些单位的持有量会放缓很多,并且某些日子会失败。经过分析,我发现重写它可能是更好、更简单的方法。
我在 Windows 2003 中的环境在 Hyper-V 中运行,分配了 3000 MB。甲骨文版本:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
"CORE 9.2.0.1.0 Production"
TNS 用于 32 位 Windows:版本 9.2.0.1.0 - Production
NLSRTL 版本 9.2。 0.1.0 - 生产
问题陈述:我正在研究以前编写的、每天晚上运行的物化视图。随着岁月的流逝,发现它经常失败并且需要很长时间。因此,寻找基于日期范围简化的方法,只需在行之间创建行可能会有所帮助,这也是我们的要求。不想使用 all_objects,因为它可以扫描每个 test_hold 行 30410 行......“从 all_objects = 30410 中选择计数(*)”。
以下是我们的步骤。1:
create table test_hold(act_id varchar2(15), fm varchar2(10),
fund varchar2(10),start_dt date,end_date date,holding number(15,4));
2.
select * from test_hold;
ACT_ID FM FUND START_DATE END_DATE UNITS HOLDINGS
A0001 FM1 ABER001 10/03/2004 11/10/2015 100 100
A0001 FM1 ABER001 12/10/2015 20/10/2015 -100 0
A0002 FM2 FSTA001 14/05/2012 03/03/2013 250 250
A0002 FM2 FSTA001 04/03/2013 19/03/2014 300 550
A0002 FM2 FSTA001 20/03/2014 19/10/2015 -550 0
3. 预期产出。
ACT_ID FM FUND TRAN_DATE HOLDNG
A0001 FM1 ABER001 10/03/2004 100
A0001 FM1 ABER001 11/03/2004 100
A0001 FM1 ABER001 12/03/2004 100
A0001 FM1 ABER001 …
A0001 FM1 ABER001 …
A0001 FM1 ABER001 11/10/2015 100
A0001 FM1 ABER001 12/10/2015 0
A0002 FM2 FSTA001 14/05/2012 250
我尝试了级别 - 1 ...连接方式和流水线功能。发现级别 - 1 不适合我。感觉管道适合,但是当生成完整的客户集时,最终会出现如下错误。还注意到,当我尝试使用 AS SELECT * 从管道函数创建表时,Windows 任务管理器中显示的 oracle.exe 内存不断从 200000 k 增长到 > 1000000 k,并且除非重新启动 oracle 服务,否则永远不会清除。
SQL>set timing on;
SQL> set autotrace traceonly statistics;
SQL> /
ERROR:
`
ORA-00600: internal error code, arguments: [kohdtf048], [], [], [], [], [], [],
[]
17536980 rows selected.
Elapsed: 00:17:34.06
Statistics
----------------------------------------------------------
20 recursive calls
0 db block gets
64632 consistent gets
2295 physical reads
0 redo size
389043748 bytes sent via SQL*Net to client
12860951 bytes received via SQL*Net from client
1169134 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
17536980 rows processed
请帮助是否正确进行或任何其他可用的简单替代方式。谢谢您的帮助。