Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.databases.oracle    |    Overblown overpriced overengineered SHIT    |    2,288 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 1,703 of 2,288    |
|    Bent Stigsen to Philip Mette    |
|    Re: Covert Oracle SQL to MSSQL statement    |
|    01 Sep 04 00:11:03    |
   
   From: ngcdo@thevoid.dk   
      
   Philip Mette wrote:   
   > I am in a crunch and need to covert this Oracle statement to MSSQL. Is   
   > there any Oracle/MSSQL experts out there that can help me? I do not   
   > understand the syntax enough to modify this.   
      
   I assume you have some experience with MSSQL's stored procedures.   
      
      
   > Thanks so much for any assistance. Here is the procedure.   
   >   
   >   
   > CREATE PROCEDURE UPD_ACTIVITY IS   
   > CURSOR ACT_cur1   
   > IS   
   > SELECT DISTINCT A.ACCT_NUM, A.DUE_DATE   
   > FROM TBLCACSDAILYACTIVITIES A ; /* this picks the unique   
   > combination of acct and date*/   
      
   declare ACT_cur1 cursor local for   
    SELECT DISTINCT A.ACCT_NUM, A.DUE_DATE   
    FROM TBLCACSDAILYACTIVITIES A   
      
   > tot_pay number ;   
   > rec_upd varchar2(1);   
   > todays_date date;   
      
   declare @tot_pay float   
   declare @rec_upd varchar(1)   
   declare @todays_date datetime   
      
      
   > BEGIN   
   > dbms_output.put_line('inside upd_activity ');   
      
   print 'inside upd_activity '   
      
      
   > SELECT SYSDATE INTO todays_date FROM DUAL;   
      
   set @todays_date = (select getdate())   
      
      
   > FOR ACT_CUR_REC1 IN ACT_CUR1   
   > LOOP   
      
   No exact equivalence in MSSQL, you would do something like   
      
   open ACT_cur1   
   while (1=1)   
   begin   
    fetch next   
    from ACT_cur1   
    into @C1_ACCT_NUM, @C1_DUE_DATE /*declare first*/   
    if (@@fetch_status <> 0) break   
      
   > rec_upd := 'N';   
      
   set @rec_upd = 'N'   
      
   > DECLARE   
   > CURSOR ACT_CUR2 IS   
   > SELECT B.ACCT_NUM,   
   > B.ACTIVITY_DATE,B.PROMISE_AMT_1,B.PROMISE_STATUS,   
   > B.TOTAL_DOLLARS_COLL   
   > FROM TBLCACSDAILYACTIVITIES B   
   > WHERE B.ACCT_NUM = ACT_CUR_REC1.ACCT_NUM   
   > AND B.DUE_DATE = ACT_CUR_REC1.DUE_DATE   
   > ORDER BY B.ACTIVITY_DATE   
   > FOR UPDATE OF B.PROMISE_STATUS,B.TOTAL_DOLLARS_COLL   
   > NOWAIT;   
      
   Dont know the equivalence for NOWAIT, try without.   
   besides that, declare as the previous cursor   
      
      
   > BEGIN   
   > dbms_output.put_line('inside upd_activity1111 ');   
   > FOR ACT_CUR_REC2 IN ACT_CUR2   
   > LOOP   
   > BEGIN   
      
   same as before   
      
   > SELECT SUM(C.PAY_AMT) into tot_pay   
   > FROM TBLCACSDAILYPAYMENTS C   
   > WHERE C.ACCT_NUM = ACT_CUR_REC2.ACCT_NUM   
   > AND C.ACTIVITY_DATE >= ACT_CUR_REC2.ACTIVITY_DATE   
   > AND C.ACTIVITY_DATE < ACT_CUR_REC2.ACTIVITY_DATE+10;   
      
   set @tot_pay = (   
    SELECT SUM(C.PAY_AMT)   
    FROM TBLCACSDAILYPAYMENTS C   
    WHERE C.ACCT_NUM = @C2_ACCT_NUM /*NB var*/   
    AND C.ACTIVITY_DATE >= @C2_ACTIVITY_DATE   
    AND C.ACTIVITY_DATE < @C2_ACTIVITY_DATE+10   
    )   
      
   > dbms_output.put_line('tot_pay =');   
   > IF tot_pay >= .9 * ACT_CUR_REC2.PROMISE_AMT_1 THEN   
      
   if (tot_pay >= .9 * @PROMISE_AMT_1)   
   begin   
      
   > IF rec_upd = 'N' THEN /* recs have not bee updated for promise   
   > status*/   
   > UPDATE TBLCACSDAILYACTIVITIES   
   > SET PROMISE_STATUS = 'PK',   
   > TOTAL_DOLLARS_COLL = tot_pay   
   > WHERE CURRENT OF ACT_CUR2;   
   > rec_upd := 'Y';   
   > ELSIF rec_upd = 'Y' THEN   
      
   end   
   else if (@rec_upd = 'Y')   
   begin   
      
      
   > UPDATE TBLCACSDAILYACTIVITIES   
   > SET PROMISE_STATUS = 'IP'   
   > WHERE CURRENT OF ACT_CUR2;   
   > END IF;   
   > ELSIF tot_pay < .9 * ACT_CUR_REC2.PROMISE_AMT_1 THEN   
   > IF (ACT_CUR_REC2.ACTIVITY_DATE+10) > todays_date THEN   
   > UPDATE TBLCACSDAILYACTIVITIES   
   > SET PROMISE_STATUS = 'OP'   
   > WHERE CURRENT OF ACT_CUR2;   
   > BREAK;   
   > ELSE   
   > UPDATE TBLCACSDAILYACTIVITIES   
   > SET PROMISE_STATUS = 'PB'   
   > WHERE CURRENT OF ACT_CUR2;   
   > END IF;   
   > END IF;   
   > END;   
   > END LOOP; /* end of ACT_CUR_REC2 loop */   
   > END;   
   > END LOOP; /*end of ACT_CUR_REC1 */   
   > END ; /* end of proc */   
   > /   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca