0

我遇到了一个 DB2 SP 代码,我在一个地方看到一个 End If,它没有对应的 If

       WHILE ( SQLSTATE = '00000' ) DO

         IF ( SELECT C5STID FROM OS025F WHERE C5OMID = V_OMID ) = 30 THEN

            IF ( SELECT COUNT ( * ) FROM OS085F WHERE J5DLR = P_DLR
            AND J5OMID =
            V_OMID AND J5DSID > 0 ) = 0 THEN

               INSERT INTO OS108F ( L8RGID , L8DLR , L8DESC , L8GOAL , L8TOT )
               SELECT V_RGID , P_DLR , C5DESC , E2GOAL , 0
               FROM OS025F AS ORDERMASTER
               INNER JOIN OS042F AS GOALS ON GOALS . E2OMID = ORDERMASTER . C5OMID
               WHERE E2DLR = P_DLR
               AND E2OMID = V_OMID
               GROUP BY 1 , 2 , C5DESC , E2GOAL ;

            ELSE IF P_NET = 'Y' THEN
               INSERT INTO OS108F ( L8RGID , L8DLR , L8DESC , L8GOAL , L8TOT  )
               SELECT V_RGID , P_DLR , C5DESC , E2GOAL , SUM( J5TNDC )
               FROM OS025F AS ORDERMASTER
               INNER JOIN OS042F AS GOALS ON GOALS.E2OMID = ORDERMASTER.C5OMID
               INNER JOIN OS085F AS DEALERORDER ON DEALERORDER.J5OMID =
               ORDERMASTER.C5OMID AND DEALERORDER.J5DLR = GOALS.E2DLR
               WHERE E2DLR = P_DLR
               AND E2OMID = V_OMID
               AND J5DSID > 0
               GROUP BY 1, 2, C5DESC, E2GOAL;

            ELSE
               INSERT INTO OS108F ( L8RGID , L8DLR , L8DESC , L8GOAL , L8TOT )
               SELECT V_RGID, P_DLR, C5DESC, E2GOAL, SUM( J5TOT )
               FROM OS025F AS ORDERMASTER
               INNER JOIN OS042F AS GOALS ON GOALS.E2OMID = ORDERMASTER.C5OMID
               INNER JOIN OS085F AS DEALERORDER ON DEALERORDER.J5OMID =
               ORDERMASTER.C5OMID AND DEALERORDER.J5DLR = GOALS.E2DLR
               WHERE E2DLR = P_DLR
               AND E2OMID = V_OMID
               AND J5DSID > 0
               GROUP BY 1, 2, C5DESC, E2GOAL;

            END IF ;

         END IF ;

        ELSE....

我只在这里粘贴了相关的代码。所以就在最后的 Else 之前,有两个 End If,其中 1 似乎是不必要的。while(第一行)之前的代码只是游标等的一些声明,所以没关系。如果您在 i navigator 中运行整个 SP 代码,SP 将像 gem 一样创建。我希望由于 End if 会引发错误。但这里的问题是我试图将其转换为等效的 RPG 代码并且编译失败..Endyy 操作不当错误。有人可以告诉我他们是否能够理解为什么额外的结尾如果没有编译失败?

4

1 回答 1

0

实际上我找到了答案.. 代码中的第一个 Else If 实际上应该被读作 else 部分中的 If。这使得一切都加起来。我已经更改了我的 RPG,以便应用相同的逻辑。

于 2017-03-23T18:10:12.130 回答