1

感谢您阅读并愿意帮助我。我基本上是一名 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

请帮助是否正确进行或任何其他可用的简单替代方式。谢谢您的帮助。

4

0 回答 0