Stored procedures 在DB2 SP代码中使用Rogue End If,但仍然有效

Stored procedures 在DB2 SP代码中使用Rogue End If,但仍然有效,stored-procedures,db2,ibm-midrange,iseries-navigator,Stored Procedures,Db2,Ibm Midrange,Iseries Navigator,我遇到了一个DB2SP代码,其中我看到了一个位置,一个没有相应If的End 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 =

我遇到了一个DB2SP代码,其中我看到了一个位置,一个没有相应If的End 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之前的代码(第一行)只是一些游标等的声明,所以并不重要。如果在iNavigator中运行整个SP代码,则会像创建宝石一样创建SP。我希望由于结束if而抛出一个错误。但这里的问题是我试图将其转换为等效的RPG代码,编译失败..Endyy操作不正确。有人能告诉我,他们是否能够理解为什么额外的end if没有编译失败?

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