Oracle 过程给出多个语法错误

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

我编写了一个存储过程来更新 2 个带有一些

IF ELSE
条件的表。但是在编译完整的过程时,我收到语法错误,如下所示

错误 1 :-- 错误(1115,1):PLS-00103:在预期以下情况之一时遇到符号“SELECT”:;使用默认authid作为集群顺序,使用外部确定性parallel_enable管道化result_cache可访问重写

错误 2:-- 错误(1217,23):PLS-00103:在期望以下其中一项时遇到符号“文件结束”:end not pragma Final instantiable persistable order overriding static member constructor map

以下是我的SP供参考。

PROCEDURE APPROVED_BY_CMM_OL
(
PJOB_PROGRESS_ID IN TBL_FIBER_INV_JOB_PROGRESS.JOB_PROGRESS_ID%TYPE,
PSTATUS_ID IN TBL_FIBER_INV_JOB_PROGRESS.STATUS_ID%TYPE,
PHOTO_ACCEPTENCE_DATE IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_ACCEPTENCE_DATE%TYPE,
PLIT_ACCEPTENCE_DATE IN TBL_FIBER_INV_JOB_PROGRESS.LIT_ACCEPTENCE_DATE%TYPE,
PAPPROVED_BY IN TBL_FIBER_INV_JOB_PROGRESS.APPROVED_BY%TYPE,
PREJECTED_BY IN TBL_FIBER_INV_JOB_PROGRESS.REJECTED_BY%TYPE,
PAPPROV_REJECT_REMARK IN TBL_FIBER_INV_JOB_PROGRESS.APPROV_REJECT_REMARK%TYPE,
PMODIFIED_BY IN TBL_FIBER_INV_JOB_PROGRESS.MODIFIED_BY%TYPE,
PUMS_GROUP_ASS_BY_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_ID%TYPE,
PUMS_GROUP_ASS_BY_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_NAME%TYPE,
PUMS_GROUP_ASS_TO_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_ID%TYPE,
PUMS_GROUP_ASS_TO_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_NAME%TYPE,
PHOTO_ACTUAL_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_ACTUAL_LENGTH%TYPE,
PLIT_ACTUAL_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.LIT_ACTUAL_LENGTH%TYPE,
POUTMSG OUT NVARCHAR2
)

SELECT DISTINCT JOB_ID INTO VJOB_ID
  FROM TBL_FIBER_INV_JOB_PROGRESS
  WHERE JOB_PROGRESS_ID = PJOB_PROGRESS_ID;


IF PSTATUS_ID = 4 OR PSTATUS_ID = 10 OR PSTATUS_ID = 11 THEN

                UPDATE TBL_FIBER_INV_JOB_PROGRESS
                       SET HOTO_ACCEPTENCE_DATE = TO_DATE (PHOTO_ACCEPTENCE_DATE, 'DD/MM/YYYY'),
      APPROVED_BY   = PAPPROVED_BY,
      APPROVED_DATE =
      CASE
        WHEN PAPPROVED_BY IS NULL
        THEN NULL
        ELSE SYSDATE
      END,
      REJECTED_BY           = NULL,
      REJECTED_DATE         = NULL,
      APPROV_REJECT_REMARK  = PAPPROV_REJECT_REMARK,
      MODIFIED_BY           = PMODIFIED_BY,
      MODIFIED_DATE         = SYSDATE,
      UMS_GROUP_ASS_BY_ID   = PUMS_GROUP_ASS_BY_ID,
      UMS_GROUP_ASS_BY_NAME = PUMS_GROUP_ASS_BY_NAME,
      UMS_GROUP_ASS_TO_ID   = NULL,
      UMS_GROUP_ASS_TO_NAME = NULL,
      UMS_GROUP_ASS_TO_DATE = SYSDATE,
      JOB_PROGRESS_FLAG     = 1,
      STATUS_ID             = PSTATUS_ID,
      HOTO_ACTUAL_LENGTH    = PHOTO_ACTUAL_LENGTH,
      LIT_ATCUAL_LENGTH     = PLIT_ACTUAL_LENGTH,
      HOTO_OFFER_LEN_UPD_BY = PUMS_GROUP_ASS_BY_NAME,
     -- IS_PARTIAL            = P_ISPARTIAL,
      NE_SPAN_LENGTH        = P_NELENGTH
    WHERE JOB_PROGRESS_ID   = PJOB_PROGRESS_ID;
    
UPDATE TBL_FIBER_INV_JOBS
    SET JOB_FLAG                = 1,
      MAINT_ZONE_NE_SPAN_LENGTH = P_NELENGTH
    WHERE JOB_ID                = VJOB_ID;
    POUTMSG                    := 'SUCCESS|HOTO process completed and Request closed';    




ELSE
    UPDATE TBL_FIBER_INV_JOB_PROGRESS
    SET HOTO_ACCEPTENCE_DATE = TO_DATE (PHOTO_ACCEPTENCE_DATE, 'DD/MM/YYYY'),
      APPROVED_BY   = PAPPROVED_BY,
      APPROVED_DATE =
      CASE
        WHEN PAPPROVED_BY IS NULL
        THEN NULL
        ELSE SYSDATE
      END,
      REJECTED_BY           = NULL,
      REJECTED_DATE         = NULL,
      APPROV_REJECT_REMARK  = PAPPROV_REJECT_REMARK,
      MODIFIED_BY           = PMODIFIED_BY,
      MODIFIED_DATE         = SYSDATE,
      UMS_GROUP_ASS_BY_ID   = PUMS_GROUP_ASS_BY_ID,
      UMS_GROUP_ASS_BY_NAME = PUMS_GROUP_ASS_BY_NAME,
      UMS_GROUP_ASS_TO_ID   = PUMS_GROUP_ASS_TO_ID,
      UMS_GROUP_ASS_TO_NAME = PUMS_GROUP_ASS_TO_NAME,
      UMS_GROUP_ASS_TO_DATE = SYSDATE,
      JOB_PROGRESS_FLAG     = 1,
      STATUS_ID             = PSTATUS_ID,
      HOTO_ACTUAL_LENGTH    = PHOTO_ACTUAL_LENGTH,
      LIT_ATCUAL_LENGTH     = PLIT_ACTUAL_LENGTH,
      HOTO_OFFER_LEN_UPD_BY = PUMS_GROUP_ASS_BY_NAME,
      --IS_PARTIAL            = P_ISPARTIAL,
      NE_SPAN_LENGTH        = P_NELENGTH
    WHERE JOB_PROGRESS_ID   = PJOB_PROGRESS_ID;


SELECT JB.SPAN_ID, JB.LINK_ID, JB.MAINTENANCEZONECODE, JB.MAINT_ZONE_NE_SPAN_LENGTH,JB.SPAN_TYPE
    INTO VSPAN_ID, VLINK_ID, VMAINTZONECODE, JOB_NE_LENGTH,VSPAN_TYPE
    FROM TBL_FIBER_INV_JOBS JB
    WHERE JB.JOB_ID = VJOB_ID;
    
    IF 1 = 1 THEN
      --            BEGIN
      UPDATE TBL_FIBER_INV_JOBS
      SET MAINT_ZONE_NE_SPAN_LENGTH = P_NELENGTH,
        JOB_FLAG                    = 0
      WHERE JOB_ID                  = VJOB_ID;
      
      UPDATE TBL_FIBER_INV_JOB_PROGRESS
      SET NE_SPAN_LENGTH = P_NELENGTH
      WHERE JOB_ID       = VJOB_ID;
      
      POUTMSG           := 'SUCCESS|HOTO process partially completed';
    END IF;
  END IF;
EXCEPTION
WHEN OTHERS THEN
  ERROR_CODE    := SQLCODE;
  ERROR_MESSAGE := SUBSTR (SQLERRM, 1, 200);
  ROLLBACK;
  POUTMSG := 'ERROR|Error occurred on record updation';
  PKG_FIBER_HOTO_COMP_NEW.INS_ERRORLOG('','','DB : APPROVED_BY_CMM_OL',ERROR_CODE||' : '||ERROR_MESSAGE);
  
END APPROVED_BY_CMM_OL;

请指出我哪里出错了

oracle stored-procedures plsql
1个回答
0
投票

您缺少部分子程序的基本结构。正如第一条错误消息所示,它在

SELECT
之前期待某些内容,并且可能性列表包括
IS
。您还缺少
BEGIN
,在本例中,它是接下来的,因为您不需要声明任何局部变量。

所以应该是:

PROCEDURE APPROVED_BY_CMM_OL
(
...
)
IS
BEGIN

SELECT DISTINCT JOB_ID INTO VJOB_ID
  FROM TBL_FIBER_INV_JOB_PROGRESS
  WHERE JOB_PROGRESS_ID = PJOB_PROGRESS_ID;
...

修复该错误后,第二个错误可能会消失,或者稍后可能会遇到其他问题。一次修复一个错误,看看它在下一次编译尝试时抱怨什么(如果有的话)。

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