由于语法错误,Oracle 过程无法运行

问题描述 投票:0回答:1

下面是 Stoed 程序,其错误如下

错误(51,5):PLS-00103:在期望以下其中一项时遇到符号“异常”:( begin case statements else elsif end exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array

create or replace PROCEDURE GET_SAPID_CREATION_INFO
AS 

ERROR_CODE NUMBER;
ERROR_MESSAGE NVARCHAR2(200);

VAR_SAPID_COUNT NUMBER;
VAR_ROW_ID NUMBER;
VAR_COUNT NUMBER;

BEGIN

SELECT COUNT(1)
INTO VAR_COUNT
FROM TBL_PRE_POST_HOTO
WHERE CREATION_SAPID IS NULL
AND SAPID_REMARKS NOT LIKE '%Sap Id :-%';

 -- create log table 'start' 'End'

INSERT INTO TBL_CMP_SAP_ID_ERRORLOG
(
  USERNAME, SAP_ID, ERROR_MESSAGE, ERROR_TYPE, LOG_DATE)
VALUES('SCHEDULER','', 'SCHDULER STARTED','', SYSDATE); 

COMMIT;
 
IF VAR_COUNT > 0 THEN

for cur_sapid in ( 
                  select SAP_ID,
                         UNIQUEID,
                         CRNO,
                         CMP_ID,
                         PROCESS_REMARK
                  FROM APP_WFM.SAPID_INPUTDATA_ENODEB       
               )
  loop         
  
  update TBL_PRE_POST_HOTO
  set CREATION_SAPID = cur_sapid.SAP_ID,
      SAPID_REMARKS =  cur_sapid.PROCESS_REMARK
where ID = cur_sapid.CMP_ID;


COMMIT;  
 
end loop;   

    
    EXCEPTION  
    WHEN OTHERS THEN
      ERROR_CODE := SQLCODE;
      ERROR_MESSAGE := SUBSTR(SQLERRM, 1, 200);

      ROLLBACK;

END;
INSERT INTO TBL_CMP_SAP_ID_ERRORLOG
(
  USERNAME, SAP_ID, ERROR_MESSAGE, ERROR_TYPE, LOG_DATE)
VALUES('SCHEDULER',cur_sapid.SAP_ID, ERROR_CODE||' : '||ERROR_MESSAGE, ERROR_CODE, SYSDATE);  
COMMIT;


END;
END GET_SAPID_CREATION_INFO;
oracle stored-procedures
1个回答
0
投票
  1. 整齐地格式化你的代码 - 如果你这样做,那么将能够轻松地看到这些问题,而无需在 Stackoverflow 上询问。
  2. 查看代码中的流程控制语句,确保每个起始流程控制语句都有相应的终止语句。 IE。
    BEGIN ... [EXCEPTION] ... END
    IF ... END IF
    FOR ... IN ... LOOP ... END LOOP

您的代码(仅包含流程控制语句)是:

create or replace PROCEDURE GET_SAPID_CREATION_INFO
AS 
  ...

BEGIN
  IF ... THEN
    for ... in ( ... )
    loop
      ...
    end loop;   
EXCEPTION  
  WHEN OTHERS THEN
    ...
END;
END;
END GET_SAPID_CREATION_INFO;

你有:

  • IF
    没有对应的
    END IF
  • 太多
    END
    陈述。

要修复此问题,请添加

END IF
语句并删除倒数第二个没有匹配
END
语句的
BEGIN
语句。

© www.soinside.com 2019 - 2024. All rights reserved.