我编写了一个存储过程来更新 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;
请指出我哪里出错了
您缺少部分子程序的基本结构。正如第一条错误消息所示,它在
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;
...
修复该错误后,第二个错误可能会消失,或者稍后可能会遇到其他问题。一次修复一个错误,看看它在下一次编译尝试时抱怨什么(如果有的话)。