我遇到了一个 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 操作不当错误。有人可以告诉我他们是否能够理解为什么额外的结尾如果没有编译失败?