Rogue End Если в коде DB2 SP, но все еще работает

Я наткнулся на код 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....

Я только вставил соответствующий кусок кода здесь. Так что прямо перед остальным в самом конце есть два конца, из которых 1 кажется ненужной. Код до while (первая строка) - это всего лишь несколько объявлений курсоров и т. Д., Поэтому не имеет значения. Если вы запустите весь код SP в навигаторе i, он будет создан как драгоценный камень. Я ожидаю, что из-за конца, если будет выброшена ошибка, если. Но проблема здесь в том, что я пытаюсь преобразовать это в эквивалентный код RPG, и компиляция завершается неудачно. Может кто-нибудь сказать мне, если они в состоянии понять, почему дополнительный конец, если не удается скомпилировать?

1 ответ

На самом деле я нашел ответ. Первое Иное I f в коде должно было читаться как I f внутри другой части. Это заставляет все складываться. Я изменил свою РПГ так, чтобы применялась та же логика.

Другие вопросы по тегам