首先建表: 
create table test( 
strdate varchar2(8),  
indexzdf number, 
indexprice number 
); 插入数据后,表中数据为: 
STRDATE             INDEXZDF       INDEXPRICE 
----------------------------
20080321                   0             1000 
20080324          -4.5514699 
20080325          1.65243499 
20080326          -0.1487968 
20080327          -5.0357180 
20080328          2.97210729 
20080331          -4.0724884 
20080401          -6.6299527 
20080402          -1.5251111 
20080403          3.85765855 
20080407          4.80564031 
20080408          1.04766019 
20080409          -4.3915539 现在需要做的是求出首记录之外的INDEXPRICE,其他日期的INDEXPRICE是根据当日INDEXZDF和前一日INDEXPRICE推算出来的,举例说明,如计算20080324对应的INDEXPRICE,则INDEXPRICE = (-4.5514699 / 100+1)* 1000  其中:-4.5514699是20080324当天的INDEXZDF,而1000是前一日的INDEXPRICE; 
计算好每一日的INDEXPRICE后再插入表中,请高手帮忙解决下,先谢谢拉^_^ 

解决方案 »

  1.   

    SQL> select * from test order by strdate;STRDATE    INDEXZDF INDEXPRICE
    -------- ---------- ----------
    20080321          0       1000
    20080324 -4.5514699
    20080325 1.65243499
    20080326  -1.652435
    20080327  .65243499
    20080328 1.65243499
    20080401 3.65243499
    20080403 4.65243499
    20080406  -4.652435
    20080407  -2.652435
    20080411 2.65243499
    20080413 3.65243499
    20080415  .65243499已选择13行。SQL> edit
    已写入 file afiedt.buf  1  declare
      2  price number;
      3  begin
      4  select INDEXPRICE into price from test
      5  where STRDATE=(select max(STRDATE) from test where INDEXPRICE is not null);
      6  for x in (select * from test where INDEXPRICE is null order by strdate asc) loop
      7  update test set INDEXPRICE=(x.indexzdf/100+1)*price where strdate=x.strdate;
      8  price:=(x.indexzdf/100+1)*price;
      9  end loop;
     10* end;
    SQL> /PL/SQL 过程已成功完成。SQL> select * from test;STRDATE    INDEXZDF INDEXPRICE
    -------- ---------- ----------
    20080326  -1.652435 954.224675
    20080327  .65243499  960.45037
    20080328 1.65243499 976.321188
    20080403 4.65243499 1059.06243
    20080406  -4.652435 1009.79024
    20080321          0       1000
    20080324 -4.5514699 954.485301
    20080325 1.65243499  970.25755
    20080401 3.65243499 1011.98069
    20080407  -2.652435 983.006208
    20080411 2.65243499 1009.07981
    20080413 3.65243499 1045.93579
    20080415  .65243499 1052.75984已选择13行。SQL>