简单的plsql to tsql ,游标拆解

  • plsql

  1 CREATE OR REPLACE PROCEDURE BMSSA.Usp_Neworderextract_All (sBBID IN VARCHAR2,ordType IN VARCHAR2,strFrDate IN VARCHAR2,strToDate IN VARCHAR2) AS
  2
  3 intRSQty   INTEGER(10);
  4 intManuSOH INTEGER(10);
  5 intNettOrd INTEGER(10);
  6 intCTDUS   INTEGER(10);
  7 intRemTrend   INTEGER(10);
  8 intHQOH  INTEGER(10);
  9 intKKOH INTEGER(10);
 10 intKCHOH INTEGER(10);
 11 intRecmdHQQty  INTEGER(10);
 12 intTransferHQQty  INTEGER(10);
 13 intPOQty INTEGER(10);
 14 intRS INTEGER(10);
 15
 16 intLatestIT INTEGER(10);
 17 strLineNum   VARCHAR2(15);
 18
 19 strSql       VARCHAR2(1000);
 20 strApCode   VARCHAR2(15);
 21 strETADate       DATE;
 22
 23 fRate                        NUMBER := 0.0050;
 24 BizCount                  NUMBER := 0;
 25 NBCount                  NUMBER := 0;
 26
 27
 28
 29 CURSOR Main_LOOP (BBID IN VARCHAR2 ) IS
 30
 31 SELECT ‘AP‘||SUBSTR(A.Requestno,1,2) ApCenter,‘   ‘||A.storeid storeid,A.requestdate,A.requestno,B.brochurecampaign Camp,
 32 Y.ITEMGROUPID BUSSCAT,
 33 B.FSC ,Y.ItemName description,
 34 DECODE(NVL(D.FSC,0),0,0,1)ControlTag,
 35 B.OnHandQty,B.InTransitQty,B.requestqty AddOrderQty,
 36 B.OnHandQty+B.InTransitQty+B.requestqty TotalNeed,
 37 DECODE(A.REASONCODE,‘1‘,‘CO‘,‘2‘,‘AO‘,‘PCM‘) CONFORD,
 38 NVL(F.testtestailtomonitor,0) testtestailtomonitor
 39 FROM [email protected] A,
 40 [email protected] B,testMANUBLOCKFSC D,Inventtable Y,
 41 (SELECT * FROM testCMHEADER WHERE dataareaid=‘835‘) F
 42 WHERE
 43 Y.Dataareaid=‘835‘
 44 AND A.requestNo = B.requestNo
 45 AND A.status in (0,2)
 46 AND B.FSC=Y.ITEMID
 47 AND B.FSC =D.FSC(+)
 48 AND B.FSC=F.ITEMID (+)
 49 AND ‘   ‘||A.storeid = sBBID
 50 AND A.reasoncode = ordtype
 51 --AND requestdate between to_date(strFrDate,‘YYYYMMDD‘) and to_date(strToDate,‘YYYYMMDD‘)  ;
 52 AND requestdate between to_date(strFrDate,‘YYYY/MM/DD‘) and to_date(strToDate,‘YYYY/MM/DD‘) ;
 53 rMain Main_Loop%ROWTYPE;
 54
 55
 56 CURSOR Main2_LOOP (BBID IN VARCHAR2 ) IS
 57
 58
 59 SELECT ‘AP‘||SUBSTR(A.REquestno,1,2) ApCenter,A.requestno,B.brochurecampaign Camp,
 60 Y.ITEMGROUPID BUSSCAT,
 61 C.testbrochurelinenum linenum,B.FSC ,C.testinvoicedesc description,
 62 DECODE(NVL(D.FSC,0),0,1,0)ControlTag,
 63 B.OnHandQty,B.InTransitQty,B.requestqty AddOrderQty,
 64 B.OnHandQty+B.InTransitQty+B.requestqty TotalNeed,
 65 NVL(E.AddOrdQty,0) LatestIT,
 66 DECODE(A.REASONCODE,‘1‘,‘CO‘,‘2‘,‘AO‘,‘PCM‘) CONFORD,
 67 --A.REASONCODE CONFORD,
 68 NVL(F.testtestailtomonitor,0)testtestailtomonitor
 69 FROM [email protected] A,
 70 [email protected] B,PRICEDISCTABLE C ,testMANUBLOCKFSC D,Inventtable Y,
 71 (SELECT A.CUSTACCOUNT,B.ITEMID,SUM(B.testQUANTITY)AddOrdQty
 72  FROM
 73 testORDERTRACKING A,testCARTONITEM B,testCARTONPICK C
 74 WHERE A.dataareaid=‘835‘
 75 AND B.dataareaid=‘835‘
 76 AND C.dataareaid=‘835‘
 77 AND A.SALESID=C.SALESID
 78 AND B.testPICKID=C.testPICKID
 79 AND A.custaccount= BBID
 80 AND A.testorderstatus=‘CARRIER‘
 81 GROUP BY A.CUSTACCOUNT,B.ITEMID
 82 )E,(SELECT * FROM testCMHEADER WHERE dataareaid=‘835‘) F
 83 WHERE
 84 C.Dataareaid=‘835‘
 85 AND Y.Dataareaid=‘835‘
 86 AND ‘   ‘||A.storeid=BBID
 87 AND A.requestNo = B.requestNo
 88 AND B.FSC=C.itemrelation
 89 AND TO_CHAR(B.BROCHURECAMPAIGN)=C.testCAMPAIGNID
 90 AND C.ACCOUNTRELATION=‘WM‘
 91 AND C.testbrochuretype=‘B‘
 92 AND A.status in (0,2)
 93 AND B.FSC=Y.ITEMID
 94 AND B.FSC =D.FSC(+)
 95 AND B.FSC =E.ITEMID(+)
 96 AND B.FSC=F.ITEMID (+) ;
 97
 98 rMain2 Main2_Loop%ROWTYPE;
 99
100
101 ---Get BrochLineNum
102 CURSOR RS_LineNum (camp IN VARCHAR2,cItemID IN VARCHAR2 ) IS
103
104 Select  testbrochurelinenum linenum
105 from PRICEDISCTABLE where dataareaid=‘835‘ and testcampaignid=camp and accountrelation=‘WM‘
106 and itemrelation=cItemID
107 and rownum < 2
108 order by rownum;
109
110 rLineNum RS_LineNum%ROWTYPE;
111
112
113 --- Latest Intransit
114 CURSOR RS_LatestIT (BBID IN VARCHAR2,cItemID IN VARCHAR2 ) IS
115
116 SELECT A.CUSTACCOUNT,B.ITEMID,SUM(B.testQUANTITY)LATESTIT
117  FROM
118 testORDERTRACKING A,testCARTONITEM B,testCARTONPICK C
119 WHERE A.dataareaid=‘835‘
120 AND B.dataareaid=‘835‘
121 AND C.dataareaid=‘835‘
122 AND A.SALESID=C.SALESID
123 AND B.testPICKID=C.testPICKID
124 AND A.custaccount= BBID
125 AND ITEMID=cItemID
126 AND A.testorderstatus=‘CARRIER‘
127 GROUP BY A.CUSTACCOUNT,B.ITEMID;
128
129 rLatestIT RS_LatestIT%ROWTYPE;
130
131
132 ---To get RS and ManuSOH--
133 CURSOR RS_ManuSOH (cAPcenter IN VARCHAR2,camp IN VARCHAR2,cItemID IN VARCHAR2 ) IS
134
135 SELECT A.ITEMID,A.TRENDQTY BizShare,B.testSTOCKONHAND,NVL(C.testQTY,0) UNITSOLD,NVL(D.TRENDQTY,0)TRENDQTY
136 FROM testABBAUTOORDERSPLIT A, testMANUSOH B,
137 testMANUUNITSOLDTMP C, testmanutrend_new D
138  WHERE A.ITEMID=B.ITEMID
139  AND A.ITEMID=C.testFSC(+)
140  AND A.APCENTER=B.testAPSCENTER
141  AND A.APCENTER=C.testAPCENTER(+)
142  AND A.APCENTER=D.APCENTER(+)
143  AND A.ITEMID=D.ITEMID(+)
144  AND A.testSELLYEARCAMP=D.testSELLYEARCAMP(+)
145  AND A.ITEMID=cItemID
146  AND A.testsellyearcamp = camp
147  AND A.APCENTER= cAPcenter;
148
149 r_RSManuSOH RS_ManuSOH%ROWTYPE;
150
151
152 ---- Picking Qty --- OH withour carrier status
153
154 CURSOR RS_PickQty (cItemID IN VARCHAR2,BBID IN VARCHAR2 ) IS
155
156  SELECT A.CUSTACCOUNT,B.ITEMID,SUM(B.testQUANTITY)PickQty
157  FROM
158 testORDERTRACKING A,testCARTONITEM B,testCARTONPICK C
159 WHERE A.dataareaid=‘835‘
160 AND B.dataareaid=‘835‘
161 AND C.dataareaid=‘835‘
162 AND A.SALESID=C.SALESID
163 AND B.testPICKID=C.testPICKID
164 AND A.custaccount= BBID
165 AND B.ITEMID = cItemID
166 AND A.testorderstatus in (‘CARTONED‘,‘SHIPPING‘,‘TRANSPRT‘)
167 GROUP BY A.CUSTACCOUNT,B.ITEMID;
168
169 r_PickQty RS_PickQty%ROWTYPE;
170
171 -- Cursor HQ,RWKK,RWKCH OnHand
172 CURSOR RS_HQOH (cItemID IN VARCHAR2 ) IS
173 /*
174 select itemid,sum(testailphysical) HQOH from inventsum where dataareaid=‘835‘
175  and inventdimid in (Select inventdimid from inventdim where inventlocationid in (‘testN‘,‘SHP‘,‘BIN‘))
176  and itemid <> chr(2)
177  and itemid=cItemID
178  group by itemid;
179  */
180
181  select itemid, ( NVL(sum(decode(B.inventlocationid,‘testN‘,A.testailphysical)),0) + NVL(sum(decode(B.inventlocationid,‘SHP‘,A.testailphysical)),0) + NVL(sum(decode(B.inventlocationid,‘BIN‘,A.testailphysical)),0)  ) HQOH,
182  NVL(sum(decode(B.inventlocationid,‘0001000‘,A.testailphysical)),0) KKOH,
183  NVL(sum(decode(B.inventlocationid,‘0002000‘,A.testailphysical)),0) KCHOH
184  from inventsum A ,InventDim B  where
185  A.dataareaid=‘835‘ and B.dataareaid=‘835‘
186  and A.inventdimid =B.inventdimid
187  and B.inventlocationid in (‘testN‘,‘SHP‘,‘BIN‘,‘0001000‘,‘0002000‘)
188  and A.itemid <> chr(2)
189  and A.itemid=cItemID
190  group by itemid;
191
192 r_HQOH RS_HQOH%ROWTYPE;
193
194
195 --&&&&&&&&&&&&&&&&&&&&&&&GEN(0) Cursor for BizShare and NonBeauty &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
196
197   CURSOR BizShare (parmAPCode IN VARCHAR2, parmFSC IN VARCHAR2)  IS  --- Loop ITEM,LOC, for Item exists in LL for Curr and BackCpg
198
199   Select count(1) bizCnt,APCODE,testFSC,RATE from testManuBizShare
200   where APCODE=parmAPCode and testFSC= parmFSC
201   group by APCODE,testFSC,RATE;
202
203
204   CURSOR NonBty (parmAPCode IN VARCHAR2, parmBuss IN VARCHAR2)  IS  --- Loop ITEM,LOC, for Item exists in LL for Curr and BackCpg
205
206   Select count(1) nbCnt,APCODE,Buss,RATE from testManuNonBeauty
207   where APCODE=parmAPCode and Buss= parmBuss
208   group by APCODE,Buss,RATE;
209
210
211    --&&&&&&&&&&&&&&&&&&&&&&&GEN(0) Cursor for BizShare and NonBeauty  &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
212
213
214
215
216 --Get PODate,Qty
217
218 CURSOR RS_PO (cItemID IN VARCHAR2 ) IS
219 Select sum(qtyordered) POQty,trunc(min(deliverydate)) PODate from PurchLine where dataareaid=‘835‘
220 and deliverydate > trunc(sysdate -14)
221 and purchstatus <> ‘2‘
222 and itemid=cItemID
223 and deliverydate in (
224 Select min(deliverydate)
225 from PurchLine where dataareaid=‘835‘
226 and deliverydate > trunc(sysdate -14)
227 and purchstatus <> ‘2‘
228 and itemid=cItemID);
229
230 r_PO RS_PO%ROWTYPE;
231
232 BEGIN
233
234
235
236   strSql := ‘INSERT INTO testABBADDORDER_NEW (APCENTER, REQUESTNO, CAMP, LINENUM, FSC,‘ ||
237                                         ‘ DESCRIPTION, CONTROLTAG, ONHANDQTY, INTRANSITQTY, ADDORDERQTY ,‘|| --,‘ ||
238                                    ‘ TOTALNEED, MANUSOH,LATESTIT, RSQTY, NETTORD ,‘ ||
239                                    ‘ CAMPBZSHARE, US,‘ ||
240                                       ‘RTREND, RECHQQTY,‘||
241                                    ‘TRANSHQ, TRANSKK, TRANSKH, ‘ ||
242                                    ‘CONFORD,HQCMF_OH, SBKK_OH, SBKH_OH, REMARK, ‘ ||
243                                    ‘FUTURE_PO , PO_ETA ,STOREID,REQUESTDATE) ‘  ||
244                                        ‘ VALUES (:1, :2, :3, :4, :5, ‘ ||
245                                    ‘ :6, :7, :8, :9, :10 ,‘ ||
246                                    ‘ :11, :12, :13 , :14, :15 , ‘ ||
247                                    ‘ :16, :17 ,‘||
248                                    ‘ :18, :19, ‘||
249                                    ‘:20, :21, :22,‘||
250                                    ‘ :23, :24, :25, :26, :27, ‘  ||
251                                       ‘:28 , :29, :30,:31) ‘;
252
253
254
255 DELETE FROM testABBADDORDER_NEW ;
256 COMMIT;
257
258 FOR rMain IN Main_Loop(sBBID) LOOP
259
260  intRecmdHQQty :=  0 ;
261   intTransferHQQty :=  0 ;
262   intHQOH  :=  0 ;
263   intRemTrend :=  0 ;
264   intRS := 0;
265   intNettOrd := 0;
266   intPOQty := 0;
267   intLatestIT := 0;
268   strLineNum :=0000 ;
269
270    --BrochLineNum
271
272    FOR r_LineNum IN RS_LineNum(rmain.camp,rmain.FSC) LOOP
273
274     strLineNum := r_LineNum.LineNum;
275
276     END LOOP;
277
278   --Latest Intransit
279
280    FOR rLatestIT IN RS_LatestIT(rmain.StoreID,rmain.FSC) LOOP
281
282     intLatestIT := rLatestIT.LatestIT;
283
284     END LOOP;
285
286
287    FOR r_RSManuSOH IN RS_ManuSOH(rmain.apcenter, rmain.Camp,rmain.FSC) LOOP
288
289     intRSQty := r_RSManuSOH.BizShare;  --CampBizShare
290     intManuSOH := r_RSManuSOH.testSTOCKONHAND;
291     intCTDUS := r_RSManuSOH.UNITSOLD;
292
293     --intNettOrd := (rMain.INTRANSITQTY - rMain.LATESTIT - intRSQty )- rMain.ADDORDERQTY;
294
295     intRemTrend := r_RSManuSOH.TRENDQTY - r_RSManuSOH.UNITSOLD ;
296
297     END LOOP;
298
299     FOR r_HQOH IN RS_HQOH(rmain.FSC) LOOP
300
301     intHQOH := r_HQOH.HQOH;
302     intKKOH := r_HQOH.KKOH;
303     intKCHOH := r_HQOH.KCHOH;
304
305     END LOOP;
306
307
308
309    --RS Qty ( Pick Qty)
310
311    FOR r_PickQty IN RS_PickQty(rmain.FSC,sBBID) LOOP
312
313     intRS := r_PickQty.PickQty;
314
315     END LOOP;
316
317   --Nett Order
318 --  intNettOrd := (rMain.INTRANSITQTY - rMain.LATESTIT - intRS )- rMain.ADDORDERQTY;
319       intNettOrd :=  rMain.ADDORDERQTY + rMain.INTRANSITQTY - intLatestIT - intRS ;  -- latest revision by sob April 18 2013
320
321    -- Recommended HQ Qty
322     --intRecmdHQQty := intRSQty * intHQOH;
323
324        strApCode := rMain.APCENTER ;
325
326
327                    BizCount := 0;
328                        ---Lookup in LOCFSC (BizShare)
329                        FOR rBizShare IN BizShare (strApCode, rmain.FSC) LOOP
330
331                         BizCount := rBizShare.bizCnt ;
332
333
334                                         intRecmdHQQty      :=     ROUND(intHQOH * rBizShare.Rate ) ;
335                                         BizCount   :=    1;
336
337
338                         END LOOP; -- Biz Share
339
340
341                         IF      BizCount <> 1 THEN
342
343                              NBCount := 0;
344
345                              FOR rNonBty IN NonBty (strApCode,rmain.BUSSCAT) LOOP
346
347                               NBCount := rNonBty.nbCnt;
348
349                                                        intRecmdHQQty      :=     ROUND(intHQOH * rNonBty.Rate) ;
350                                                        NBCount    :=   1;
351
352                             END LOOP;
353
354                              END IF;
355                                       ---Fixed Rate
356
357                                IF ( NBCount=0  AND BizCount=0 ) THEN
358
359                                                 intRecmdHQQty      :=     ROUND(intHQOH * fRate) ;
360
361                                 END IF;
362
363
364
365
366
367    if  (intRecmdHQQty < intNettOrd) then
368
369         intTransferHQQty := intRecmdHQQty;
370
371     else
372
373         intTransferHQQty := intNettOrd;
374    end if;
375
376
377
378
379       --- PO date and Qty
380       FOR r_PO IN RS_PO(rmain.FSC) LOOP
381
382        intPOQty := r_PO.POQty;
383         strETADate := r_PO.PODate;
384
385
386     END LOOP;
387
388     BEGIN
389
390     EXECUTE IMMEDIATE strSql  USING
391        rMain.APCENTER, rMain.REQUESTNO, rMain.CAMP, strLineNum, rMain.FSC,
392        rMain.DESCRIPTION, rMain.CONTROLTAG,rMain.ONHANDQTY, rMain.INTRANSITQTY, rMain.ADDORDERQTY ,
393        rMain.TOTALNEED, intManuSOH,intLatestIT, intRS, intNettOrd,  --RSQty = Picking (Ordertracking not equal to Carrier)
394        intRSQty,intCTDUS,  --intRSQty actually CampBizbShare
395        intRemTrend,intRecmdHQQty,
396        ‘‘,‘‘,‘‘,  -- 20,21,22
397        rMain.CONFORD,rMain.testtestailtomonitor,intKKOH,intKCHOH,‘‘, -- 23,24,25,26,27
398        intPOQty, strETADate, rMain.storeid,rMain.requestdate;
399
400        EXCEPTION
401         WHEN OTHERS THEN
402         RAISE_APPLICATION_ERROR(‘-20050‘, ‘SQL: ‘ || strSql  || ‘ ‘ ||  ‘OrderNo: ‘ || rMain.REQUESTNO ||
403         ‘ Error: ‘ || SQLERRM );
404
405     END;
406
407 END LOOP;
408
409
410 END;
411 /

  • tsql

  1
  2 IF  EXISTS(SELECT 1 FROM SYS.types AS t WHERE t.name=‘UDT_Usp_Neworderextract_All_ML‘)
  3     DROP TYPE dbo.UDT_Usp_Neworderextract_All_ML
  4 GO
  5 CREATE TYPE dbo.UDT_Usp_Neworderextract_All_ML AS  TABLE
  6 (        ID                      BIGINT  ,
  7          ApCenter             NVARCHAR(5),
  8          storeid              NVARCHAR(20),
  9          requestdate          DATE,
 10          requestno            NVARCHAR(20),
 11          Camp                 NVARCHAR(20),
 12          BUSSCAT              NVARCHAR(20),
 13          FSC                  NVARCHAR(20),
 14          [DESCRIPTION]        NVARCHAR(20),
 15          ControlTag           NVARCHAR(5),
 16          OnHandQty            NUMERIC(30, 12),
 17          InTransitQty         NUMERIC(30, 12),
 18          AddOrderQty          NUMERIC(30, 12),
 19          TotalNeed            NUMERIC(30, 12),
 20          CONFORD              NVARCHAR(5),
 21          testtestailtomonitor     NUMERIC(30, 12)
 22         PRIMARY KEY CLUSTERED(ID)
 23 )
 24 GO
 25 IF object_id(‘Usp_Neworderextract_All‘) IS NOT NULL
 26 BEGIN
 27     PRINT ‘Dropping procedure Usp_Neworderextract_All‘
 28     DROP PROCEDURE [Usp_Neworderextract_All]
 29     IF @@ERROR = 0 PRINT ‘Procedure Usp_Neworderextract_All dropped‘
 30 END
 31 go
 32
 33 CREATE PROCEDURE [Usp_Neworderextract_All]
 34  (@SBBID   NVARCHAR(20),@ordType   NVARCHAR(20),@strFrDate   DATE,@strToDate   DATE)
 35 AS
 36 BEGIN
 37     SET NOCOUNT ON;
 38     DECLARE @intRSQty             INT,
 39         @intManuSOH           INT,
 40         @intNettOrd           INT,
 41         @intCTDUS             INT,
 42         @intRemTrend          INT,
 43         @intHQOH              INT,
 44         @intKKOH              INT,
 45         @intKCHOH             INT,
 46         @intRecmdHQQty        INT,
 47         @intTransferHQQty     INT,
 48         @intPOQty             INT,
 49         @intRS                INT,
 50         @intLatestIT          INT,
 51         @strLineNum           NVARCHAR(15),
 52         @strSql               NVARCHAR(2000),
 53         @PARAMS                  nvarchar(500),
 54         @strApCode            NVARCHAR(15),
 55         @strETADate           DATE,
 56         @fRate                NUMERIC = 0.0050,
 57         @BizCount             NUMERIC = 0,
 58         @NBCount              NUMERIC = 0 ,
 59         @ML_SQL                  NVARCHAR(1000),
 60         @ML_PARAM              NVARCHAR(100),
 61         @ML_ROWID              NUMERIC(10) = 1,
 62         @ML_MAX               NUMERIC(10) = 0,
 63         @ML_RECORD              UDT_Usp_Neworderextract_All_ML,
 64         @ML_CURSOR              UDT_Usp_Neworderextract_All_ML
 65     /*BEGIN TRY*/
 66     BEGIN TRY
 67    SET @strSql = N‘INSERT INTO testABBADDORDER_NEW( APCENTER,REQUESTNO,CAMP,LINENUM,FSC,[DESCRIPTION], ‘ + char(10)
 68          + N‘       CONTROLTAG,ONHANDQTY,INTRANSITQTY,ADDORDERQTY,TOTALNEED,MANUSOH,LATESTIT, ‘ + char(10)
 69          + N‘       RSQTY,NETTORD,CAMPBZSHARE,US,RTREND,RECHQQTY,TRANSHQ,TRANSKK,TRANSKH, ‘ + char(10)
 70          + N‘       CONFORD,HQCMF_OH,SBKK_OH,SBKH_OH,REMARK,FUTURE_PO,PO_ETA,STOREID, ‘ + char(10)
 71          + N‘       REQUESTDATE) ‘ + char(10)
 72          + N‘ SELECT rMain.APCENTER,rMain.REQUESTNO,rMain.CAMP,@strLineNum,rMain.FSC,rMain.[DESCRIPTION], ‘ + char(10)
 73          + N‘        rMain.CONTROLTAG,rMain.ONHANDQTY,rMain.INTRANSITQTY,rMain.ADDORDERQTY, ‘ + char(10)
 74          + N‘        rMain.TOTALNEED,@intManuSOH,@intLatestIT,@intRS,@intNettOrd,@intRSQty,@intCTDUS, ‘ + char(10)
 75          + N‘        @intRemTrend,@intRecmdHQQty,‘‘‘‘,‘‘‘‘,‘‘‘‘,rMain.CONFORD,rMain.testtestailtomonitor, ‘ + char(10)
 76          + N‘        @intKKOH,@intKCHOH,‘‘‘‘,@intPOQty,@strETADate,rMain.storeid,rMain.requestdate FROM @RMAin AS rMain‘
 77
 78   SET @PARAMS  = N‘@RMAin UDT_Usp_Neworderextract_All_ML,@strLineNum NVARCHAR(15),@intManuSOH  ‘
 79          + N‘        INT,@intLatestIT INT,@intRS INT,@intNettOrd INT,@intRSQty INT,@intCTDUS  ‘
 80          + N‘        INT,@intRemTrend INT,@intRecmdHQQty INT,@intKKOH INT,@intKCHOH INT,@intPOQty  ‘
 81          + N‘        INT,@strETADate DATE‘
 82   /* CURSOR Main_LOOP(BBID IN NVARCHAR) IS */
 83   SELECT @ML_SQL   = N‘ SELECT ROW_NUMBER() OVER( ORDER BY ApCenter) AS ID,T1.* FROM (‘
 84         +‘ SELECT ‘‘AP‘‘ + SUBSTRING(A.Requestno, 1, 2) ApCenter,‘‘   ‘‘ + A.storeid storeid,A.requestdate, ‘ + char(10)
 85         + ‘        A.requestno,B.brochurecampaign Camp,Y.ITEMGROUPID BUSSCAT,B.FSC,Y.ItemName  ‘ + char(10)
 86         + ‘        [DESCRIPTION],CASE ISNULL(D.FSC, 0) WHEN 0 THEN 0 ELSE 1 END ControlTag, ‘ + char(10)
 87         + ‘B.OnHandQty,B.InTransitQty,B.requestqty AddOrderQty, ‘ + char(10)
 88         + ‘B.OnHandQty + B.InTransitQty + B.requestqty TotalNeed, ‘ + char(10)
 89         + ‘CASE A.REASONCODE WHEN ‘‘1‘‘ THEN ‘‘CO‘‘ WHEN ‘‘2‘‘THEN ‘‘AO‘‘ELSE ‘‘PCM‘‘ END CONFORD, ‘ + char(10)
 90         + ‘ISNULL(F.testtestailtomonitor, 0) testtestailtomonitor ‘ + char(10)
 91         + ‘FROM drmpos.storeinvrequest A ‘ + char(10)
 92         + ‘INNER JOIN drmpos.storeinvrequestdetail B ON A.requestNo = B.requestNo ‘ + char(10)
 93         + ‘LEFT JOIN testMANUBLOCKFSC D ON B.FSC = D.FSC ‘ + char(10)
 94         + ‘LEFT JOIN Inventtable Y  ON  B.FSC = Y.ITEMID ‘ + char(10)
 95         + ‘LEFT JOIN (    ‘ + char(10)
 96         + ‘    SELECT * FROM testCMHEADER WHERE dataareaid = ‘‘835‘‘ ‘ + char(10)
 97         + ‘    ) F  ON B.FSC = F.ITEMID  ‘ + char(10)
 98         + ‘ WHERE Y.Dataareaid = ‘‘835‘‘ AND A.[status] IN (0, 2)  ‘ + char(10)
 99         + ‘AND ‘‘   ‘‘ + A.storeid = @sBBID AND A.reasoncode = @ordType     ‘ + char(10)
100         + ‘AND requestdate BETWEEN CONVERT( DATE ,@strFrDate ) AND CONVERT( DATE , @strToDate ) ‘
101         +‘) AS T1‘,
102 @ML_PARAM    =N‘@sBBID NVARCHAR(20), @ordType NVARCHAR(20), @strFrDate DATE,@strToDate DATE‘
103
104 --//CLEAR
105 DELETE FROM testABBADDORDER_NEW
106 DELETE FROM @ML_CURSOR
107 INSERT INTO @ML_CURSOR EXEC SYS.sp_executesql @[email protected]_SQL,@[email protected]_PARAM,@sBBID = @sBBID,@ordType = @ordType,@strFrDate = @strFrDate,@strToDate =   @strToDate
108 SELECT @[email protected]@ROWCOUNT  , @ML_ROWID=1 FROM @ML_CURSOR
109 WHILE (@ML_ROWID<=@ML_MAX)
110 --//BEGIN @ML_RECORD
111 BEGIN
112     DELETE FROM @ML_RECORD/*clear*/
113     INSERT INTO @ML_RECORD SELECT * FROM  @ML_CURSOR WHERE ID=@ML_ROWID
114     SELECT  @intRecmdHQQty        = 0,
115         @intTransferHQQty     = 0,
116         @intHQOH              = 0,
117         @intRemTrend          = 0,
118         @intRS                = 0,
119         @intNettOrd           = 0,
120         @intPOQty             = 0,
121         @intLatestIT          = 0,
122         @strLineNum           = 0000
123
124     --BrochLineNum
125     ;WITH r_LineNum AS (
126         SELECT   testbrochurelinenum     linenum
127         FROM PRICEDISCTABLE,@ML_RECORD rmain  WHERE dataareaid = ‘835‘ AND testcampaignid = rmain.camp  AND
128         accountrelation      = ‘WM‘
129         AND itemrelation     = rmain.FSC
130         AND rownum < 2
131
132     )
133         SELECT @strLineNum=linenum FROM r_LineNum
134
135     --Latest Intransit
136     ;WITH rLatestIT AS(
137         SELECT A.CUSTACCOUNT,B.ITEMID,SUM(B.testQUANTITY)LATESTIT  FROM
138         testORDERTRACKING A,testCARTONITEM B,testCARTONPICK C,@ML_RECORD rmain
139         WHERE A.dataareaid = ‘835‘
140         AND B.dataareaid = ‘835‘
141         AND C.dataareaid = ‘835‘
142         AND A.SALESID = C.SALESID
143         AND B.testPICKID = C.testPICKID
144         AND A.custaccount = rmain.StoreID
145         AND ITEMID =  rmain.FSC
146         AND A.testorderstatus = ‘CARRIER‘
147         GROUP BY A.CUSTACCOUNT,B.ITEMID
148     )
149     SELECT   @intLatestIT    = rLatestIT.LatestIT FROM rLatestIT
150
151     --RS_ManuSOH
152     ;WITH r_RSManuSOH AS (
153         SELECT A.ITEMID,A.TRENDQTY BizShare,B.testSTOCKONHAND,ISNULL(C.testQTY, 0) UNITSOLD,
154         ISNULL(D.TRENDQTY, 0)        TRENDQTY
155         FROM testABBAUTOORDERSPLIT A
156         INNER JOIN testMANUSOH B ON A.ITEMID = B.ITEMID     AND A.APCENTER = B.testAPSCENTER
157         INNER JOIN @ML_RECORD rmain ON 1=1
158         LEFT JOIN testMANUUNITSOLDTMP C ON A.ITEMID = C.testFSC  AND A.APCENTER = C.testAPCENTER
159         LEFT JOIN testmanutrend_new   D ON  A.APCENTER = D.APCENTER AND A.ITEMID = D.ITEMID AND A.testSELLYEARCAMP = D.testSELLYEARCAMP
160         WHERE   A.ITEMID = rmain.FSC AND A.testsellyearcamp =  rmain.Camp AND A.APCENTER = rmain.apcenter
161     )
162     SELECT @intRSQty = r_RSManuSOH.BizShare, @intManuSOH = r_RSManuSOH.testSTOCKONHAND,@intCTDUS = r_RSManuSOH.UNITSOLD ,
163         @intRemTrend = r_RSManuSOH.TRENDQTY - r_RSManuSOH.UNITSOLD  FROM r_RSManuSOH
164
165     --RS_HQOH
166     ;WITH r_HQOH AS (
167         SELECT itemid,(
168             ISNULL(SUM(CASE   B.inventlocationid WHEN ‘testN‘ THEN A.testailphysical END ), 0 ) +
169             ISNULL(SUM(CASE B.inventlocationid WHEN ‘SHP‘ THEN A.testailphysical END ),0) +
170             ISNULL(SUM(CASE B.inventlocationid WHEN‘BIN‘ THEN A.testailphysical END),0)
171             ) HQOH,
172             ISNULL(SUM(CASE B.inventlocationid WHEN‘0001000‘ THEN A.testailphysical END),0) KKOH,
173             ISNULL(SUM(CASE B.inventlocationid WHEN‘0002000‘ THEN A.testailphysical END),0) KCHOH
174             FROM inventsum A ,InventDim B,@ML_RECORD rmain  WHERE
175             A.dataareaid = ‘835‘ AND B.dataareaid = ‘835‘
176             AND A.inventdimid = B.inventdimid
177             AND B.inventlocationid
178             IN (‘testN‘, ‘SHP‘, ‘BIN‘, ‘0001000‘, ‘0002000‘)
179             AND A.itemid <> CHAR(2)
180             AND A.itemid = rmain.FSC
181         GROUP BY itemid
182     )
183     SELECT  @intHQOH = r_HQOH.HQOH, @intKKOH  = r_HQOH.KKOH, @intKCHOH = r_HQOH.KCHOH  FROM r_HQOH
184
185     --RS Qty ( Pick Qty)
186     ;WITH r_PickQty AS (
187         SELECT A.CUSTACCOUNT,B.ITEMID,SUM(B.testQUANTITY)PickQty
188         FROM  testORDERTRACKING A,testCARTONITEM B,testCARTONPICK C,@ML_RECORD rmain
189         WHERE A.dataareaid = ‘835‘
190         AND B.dataareaid = ‘835‘
191         AND C.dataareaid = ‘835‘
192         AND A.SALESID = C.SALESID
193         AND B.testPICKID = C.testPICKID
194         AND A.custaccount = @SBBID
195         AND B.ITEMID = rmain.FSC
196         AND A.testorderstatus IN (‘CARTONED‘, ‘SHIPPING‘, ‘TRANSPRT‘)
197         GROUP BY A.CUSTACCOUNT,B.ITEMID
198     )
199     SELECT  @intRS   = r_PickQty.PickQty FROM r_PickQty
200
201
202     --Nett Order
203     SELECT  @intNettOrd =  rMain.ADDORDERQTY + rMain.INTRANSITQTY - @intLatestIT - @intRS FROM @ML_RECORD rmain
204     -- Recommended HQ Qty
205     SELECT   @strApCode  = rMain.APCENTER ,@BizCount = 0 FROM @ML_RECORD rmain
206
207     --Lookup in LOCFSC (BizShare)
208     ;WITH rBizShare AS (
209          SELECT COUNT(1)     bizCnt,APCODE,testFSC,RATE FROM testManuBizShare,@ML_RECORD rmain
210         WHERE APCODE = @strApCode AND testFSC =  rmain.FSC
211         GROUP BY     APCODE,testFSC,RATE
212     )
213     SELECT  @BizCount  = rBizShare.bizCnt,  @intRecmdHQQty = ROUND(@intHQOH * rBizShare.Rate, 0),
214      @BizCount= 1 FROM rBizShare
215     -- Biz Share
216     IF @BizCount <> 1
217     BEGIN
218         SET @NBCount = 0
219         ;WITH rNonBty AS (
220             SELECT COUNT(1)     nbCnt,APCODE,Buss,RATE FROM testManuNonBeauty,@ML_RECORD rmain
221             WHERE APCODE = @strApCode AND Buss =  rmain.BUSSCAT
222             GROUP BY     APCODE,Buss,RATE
223         )
224         SELECT  @NBCount = rNonBty.nbCnt, @intRecmdHQQty = ROUND(@intHQOH * rNonBty.Rate,0) ,  @NBCount = 1 FROM rNonBty
225     END
226      ---Fixed Rate
227     IF @NBCount = 0  AND @BizCount = 0
228     BEGIN
229         SET @intRecmdHQQty = ROUND(@intHQOH * @fRate, 0)
230     END
231
232     IF @intRecmdHQQty < @intNettOrd
233     BEGIN
234         SET @intTransferHQQty = @intRecmdHQQty
235     END
236     ELSE
237     BEGIN
238         SET @intTransferHQQty = @intNettOrd
239     END
240
241      --- PO date and Qty
242     ;WITH r_PO AS (
243         SELECT SUM(qtyordered) POQty,CONVERT(DATE, MIN(deliverydate)) PODate FROM
244         PurchLine,@ML_RECORD rmain  WHERE dataareaid = ‘835‘
245         AND deliverydate > CONVERT(DATE, GETDATE() -14)
246         AND purchstatus <> ‘2‘
247         AND itemid = rmain.FSC
248         AND deliverydate IN (
249         SELECT MIN(deliverydate)
250         FROM PurchLine,@ML_RECORD rmain  WHERE dataareaid = ‘835‘
251         AND deliverydate > CONVERT(DATE, GETDATE() -14)
252         AND purchstatus <> ‘2‘
253         AND itemid = rmain.FSC )
254      )
255     SELECT @intPOQty  = r_PO.POQty  , @strETADate  = r_PO.PODate   FROM r_PO
256
257     BEGIN
258         EXEC SP_EXECUTESQL @[email protected],@PARAM=@PARAMS
259         , @RMAin = @ML_RECORD,@strLineNum = @strLineNum,@intManuSOH = @intManuSOH,@intLatestIT
260         = @intLatestIT,@intRS = @intRS,@intNettOrd = @intNettOrd,@intRSQty = @intRSQty,
261         @intCTDUS = @intCTDUS,@intRemTrend = @intRemTrend,@intRecmdHQQty = @intRecmdHQQty,
262         @intKKOH = @intKKOH,@intKCHOH = @intKCHOH,@intPOQty = @intPOQty,@strETADate = @strETADate
263         IF @@ERROR>0
264              RAISERROR (‘Error raised in EXEC SP_EXECUTESQL @[email protected],@[email protected]‘, 16, 1 );/*[0-10]:CONTINUE;[11-19]:jump to catch*/
265     END
266     SET @ML_ROWID+=1
267 END      --//END @ML_RECORD
268     END TRY
269     /*END TRY*/
270     BEGIN CATCH
271         /*DECLARE*/
272         DECLARE @ErrorMessage        NVARCHAR(4000),
273                 @ErrorSeverity       NVARCHAR(5),
274                 @ErrorState          NVARCHAR(5),
275                 @ERROR_NUMBER        NVARCHAR(5),
276                 @ERROR_LINE          NVARCHAR(5),
277                 @ERROR_PROCEDURE     NVARCHAR(100)
278         /*SET VALUES*/
279         SELECT @ErrorMessage = ERROR_MESSAGE(),
280                @ErrorSeverity       = ERROR_SEVERITY(),
281                @ErrorState          = ERROR_STATE(),
282                @ERROR_NUMBER        = ERROR_NUMBER(),
283                @ERROR_LINE          = ERROR_LINE(),
284                @ERROR_PROCEDURE     = CASE ISNULL(ERROR_PROCEDURE(), ‘‘) WHEN ‘‘ THEN ‘‘ ELSE  ‘Error occur when running procedure: [‘  + ERROR_PROCEDURE() + ‘];‘   END;
285         /*FORMATING MSG*/
286         SET @ErrorMessage = @ERROR_PROCEDURE + CHAR(10)
287             + ‘Msg:‘ + @ErrorMessage + ‘ Line:‘ + @ERROR_LINE + ‘ Number:‘ + @ERROR_NUMBER
288             + CHAR(10)
289             + ‘Date:‘ + CONVERT(NVARCHAR(30), GETDATE(), 120)
290         /*RAISERROR*/
291         RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
292     END CATCH;
293     RETURN 0
294 END
295 go
296
297 IF @@ERROR = 0 PRINT ‘Procedure Usp_Neworderextract_All created‘
298 go

时间: 2024-08-27 22:15:50

简单的plsql to tsql ,游标拆解的相关文章

T-SQL游标

游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 在性能上,游标会迟更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量. 用一个比喻来说明为什么游标会占用更多的资源.当你从ATM机取款的时候,是一次取1000的效率更高呢,还是10次100呢? 既然游标那么多缺点,为什么要学习游标呢? 现存系统有一些游标,我们查询必须通过游标来实现. 作用一个备用方式,当使用while.子查询,临时表,表变量,自建函数或其他方式仍然无法实现某些查询的时候,可以使用游

PLSQL 申明和游标

--从键盘输入一个数 accept b prompt '请输入一个大于零的数字'; declare anum number := &b; begin while anum>0 loop dbms_output.put_line(anum); anum:=anum-1; end loop; end; declare v_num number; begin -- 从stsu表中选出id最大的值,并根据该值打印次数 select max(id) into v_num from stsu; loop

PLSQL——04、游标

隐式游标 隐式游标的属性: SQL%ROWCOUNT 成功操作的行的数量 SQL%FOUND 发现复合条件的行返回TRUE SQL%NOTFOUND 没有发现复合条件的行回TRUE SQL%ISOPEN 游标打开状态(boolean) 演示:打印隐式游标属性 declare v_count number; begin select count(*) into v_count from scott.emp; dbms_output.put_line(chr(10)||'select return

Oracle PLSQL Demo - 17.游标查询个别字段(非整表)

declare Type ref_cur_variable IS REF cursor; cur_variable ref_cur_variable; v_empno scott.emp.empno%type; v_ename scott.emp.ename%type; v_sql varchar2(100) := 'select t.empno, t.ename from scott.emp t'; begin Open cur_variable For v_sql; Loop fetch c

Oracle PLSQL Demo - 13.游标的各种属性[Found NotFound ISOpen RowCount CURSOR]

declare r_emp scott.emp%rowtype; cursor cur_emp is select t.* from scott.emp t; begin open cur_emp; if cur_emp%isopen then dbms_output.put_line('is open...'); end if; loop fetch cur_emp into r_emp; if cur_emp%found then dbms_output.put_line('found...

SQL Server 事务、异常和游标

建议先阅读存储过程:SQL Server 存储过程 ? 事务 在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整体要么全部成功,要么全部失败,这就需要用到事务. 1. 事务的特点 事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库系统,执行时,这组指令要么全部执行完成,要么全部取消.因此,事务是一个不可分割的逻辑单元. 事务有4个属性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)以及持久性(Durability),也

高级T-SQL进阶系列 (一):使用 CROSS JOIN 介绍高级T-SQL

这是一个新进阶系列的第一篇文章,我们将浏览Transact-SQL(T-SQL)的更多高级特性.这个进阶系列将会包含一系列的文章,它们会扩展你在之前的两个TSQL进阶系列所掌握的TSQL的基础. TSQL DML 进阶 TSQL进阶:超越基础 本系列“高级Transact-SQL”将会包含如下T-SQL主题: 使用CROSS JOIN 操作符 使用APPLY操作符 理解通用表表达式(CTE's) 使用TSQL游标的记录级别处理 使用UNPIVOT实现列转行 使用排序函数对数据进行排序 使用相关函

SQL中游标(二)

游标是SQL数据库中不可或缺的部分,可以旋转储存在系统永久表中的数据行的副本,下面就将为您详解游标的使用,以及语法,供您参考学习. MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针. 游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法. 1.如何使用游标 1)    定义游标语句 Declare <游标名> Cursor For 2)    创建游标语句 Open <游标名&g

SqlServer之游标深入

原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/introduce-for-sqlserver-cursor-2/ 上一节我们简单讲解了SqlServer的游标的简单创建,本节我们将根据msdn上的创建游标代码来详细讲解游标的创建.以及其特性. 1 DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] 2 [ FORWARD_ONLY | SCROLL ] 3 [