create or replace procedure proTmpso_new(sDate varchar2,sMonth Varchar2,SESID VARCHAR2,sCCN varchar2) As
vint integer;
Cursor Tmpso_Cur IS 
       SELECT CCN,MAS_LOC,ITEM,REVISION rev,to_Char(FORECAST_DATE,'YYYY/MM') f_date,Nvl(sum(QTY),0) qty 
       FROM forecast 
       where 
             CCN=sCCN AND FORECAST_DATE Between to_date(sDate,'YYYY/MM/DD') 
             AND add_months(to_date(sDate,'YYYY/MM/DD'),9) 
        Group by CCN,MAS_LOC,ITEM,REVISION,to_Char(FORECAST_DATE,'YYYY/MM');
begin  
  Insert Into TMPSO009_NEW (CCN,MAS_LOC,item,Revision,Line,Source,SESSION_ID)
  Select Distinct
CCN,MAS_LOC,ITEM,REVISION,'000001','Forecast',SesID
  From 
    Forecast 
where CCN=sccn AND FORECAST_DATE between to_date(sDate,'YYYY/MM/DD') and Add_months(to_date(sDate,'YYYY/MM/DD'),9);
  commit; 
  For VTmpso_new IN Tmpso_Cur LOOP
     vint := Getnum(VTmpso_new.f_Date,sMonth);     
     IF vint = 1 Then
           update tmpso009_new set Data1=VTmpso_new.qty where session_id='||sesid||' and ccn='||VTmpso_new.ccn ||' and item='||VTmpso_new.item||' and revision='||VTmpso_new.Rev||' and mas_loc='||VTmpso_new.mas_loc||' and line='000001' and source='Forecast' ;
     ElsIF vint = 2 Then
           update tmpso009_new set Data2 =VTmpso_new.qty where session_id='||sesid||' and ccn='||VTmpso_new.ccn ||' and item='||VTmpso_new.item||' and revision='||VTmpso_new.Rev||' and mas_loc='||VTmpso_new.mas_loc||' and line='000001' and source='Forecast' ;
     End IF;            
   End Loop;
  commit;
end proTmpso_new;其中的update语句为什么不执行???????

解决方案 »

  1.   

    可能你需要的是这样....(注意where条件)      UPDATE tmpso009_new
             SET Data2 = VTmpso_new.qty
           WHERE session_id = sesid
             AND ccn = VTmpso_new.ccn 
             AND item = VTmpso_new.item
             AND revision = VTmpso_new.Rev
             AND mas_loc = VTmpso_new.mas_loc
             AND line = '000001'
             AND SOURCE = 'Forecast';