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 внутри другой части. Это заставляет все складываться. Я изменил свою РПГ так, чтобы применялась та же логика.