PLS-00103:在预期以下情况之一时遇到符号“END”
Posted
技术标签:
【中文标题】PLS-00103:在预期以下情况之一时遇到符号“END”【英文标题】:PLS-00103: Encountered the symbol "END" when expecting one of the fo llowing 【发布时间】:2011-07-18 10:58:37 【问题描述】:我收到此错误:
[sqlplus] Truncating dimension dw_DM_Application
[sqlplus] END;
[sqlplus] *
[sqlplus] ERROR at line 190:
[sqlplus] ORA-06550: line 190, column 1:
[sqlplus] PLS-00103: Encountered the symbol "END" when expecting one of the following:
[sqlplus] begin case declare exit for goto if loop mod null pragma
[sqlplus] raise return select update while with <an identifier>
[sqlplus] <a double-quoted delimited-identifier> <a bind variable> <<
[sqlplus] close current delete fetch lock insert open rollback
[sqlplus] savepoint set sql execute commit forall merge pipe
对于以下代码,我不知道是什么导致了这个丑陋的错误:
DECLARE
StartDate DATE;
EndDate DATE;
PROCEDURE DM_Application_Full_Refresh IS
v_RecordStatus VARCHAR2(10);
BEGIN
v_RecordStatus:='Normal';
INSERT INTO dw_DM_Application
(
dmApplicationkey,
vRecordStatus,
nApplicationId,
nPostingTargetId,
nCandidateProfileId,
nOpeningId,
nJobselectionProcessId,
vApplicationStatus,
dApplicationDate,
bManually,
vOrigin,
bArchived,
dCreationDate,
dCreationDateMM,
dUpdateDate,
dUpdateDateMM,
bActiveApplication,
vApplicationSrcType,
vSrcChannelName,
vSourcingMedium,
nJobDeptlevel1Id,
nJobDeptlevel2Id,
nJobDeptlevel3Id,
bJobIsArchived,
bJobIsGeneralApp,
nJobRecruitingUser1Id,
nJobRecruitingUser2Id,
nJobRecruitingUser3Id,
vJobCountry,
vJobRegion,
vJobContractType,
vCandType,
vCandGender,
dHireDate,
dHireDateMM
)
SELECT row_number() over (order by 1),
v_RecordStatus,
a.*
FROM (
SELECT /*+ use_nl(a cp) INDEX(a IDX_RLSH_25_FK_) index (cp pk_candidateprofile) */
a.nApplicationId,
a.nPostingTargetId,
a.nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobSelectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
0 bArchived, -- Not archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', '-') CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM Application a, Opening o, CandidateProfile cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileid=cp.nCandidateProfileid
UNION ALL
SELECT /*+ FIRST_ROWS */
a.nApplicationIdH nApplicationId,
a.nPostingTargetIdH nPostingTargetId,
a.nCandidateProfileIdH nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobselectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
1 bArchived, -- Archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', NULL) CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM ApplicationH a, Opening o, CandidateProfileH cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileidH=cp.nCandidateProfileidH
AND cp.nCandidateProfileidH > 0) a;
END;
BEGIN
SELECT SYSDATE
INTO StartDate
FROM DUAL;
DM_Application_Full_Refresh;
COMMIT;
SELECT SYSDATE
INTO EndDate
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('Full refresh of DW_DM_APPLICATION finished. Time: '|| TO_CHAR(ROUND((EndDate-StartDate)*3600*24)));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Errors occured: '||SUBSTR(SQLERRM(SQLCODE),1, 200));
END;
/
【问题讨论】:
在程序开始之前我确实有一个声明语句,所以我现在已经编辑了原始问题。我仍然收到此错误。 【参考方案1】:你有两段代码:
-
定义过程的代码
运行该过程的代码
但是,您将它们一起运行,这是 Oracle 不喜欢的。我不确定你是想创建一个存储过程,还是只是临时定义一个过程并运行它?如果是后者,那么这样做:
DECLARE
PROCEDURE DM_Application_Full_Refresh IS
v_RecordStatus VARCHAR2(10);
BEGIN
v_RecordStatus:='Normal';
INSERT INTO dw_DM_Application
(
dmApplicationkey,
vRecordStatus,
nApplicationId,
nPostingTargetId,
nCandidateProfileId,
nOpeningId,
nJobselectionProcessId,
vApplicationStatus,
dApplicationDate,
bManually,
vOrigin,
bArchived,
dCreationDate,
dCreationDateMM,
dUpdateDate,
dUpdateDateMM,
bActiveApplication,
vApplicationSrcType,
vSrcChannelName,
vSourcingMedium,
nJobDeptlevel1Id,
nJobDeptlevel2Id,
nJobDeptlevel3Id,
bJobIsArchived,
bJobIsGeneralApp,
nJobRecruitingUser1Id,
nJobRecruitingUser2Id,
nJobRecruitingUser3Id,
vJobCountry,
vJobRegion,
vJobContractType,
vCandType,
vCandGender,
dHireDate,
dHireDateMM
)
SELECT row_number() over (order by 1),
v_RecordStatus,
a.*
FROM (
SELECT /*+ use_nl(a cp) INDEX(a IDX_RLSH_25_FK_) index (cp pk_candidateprofile) */
a.nApplicationId,
a.nPostingTargetId,
a.nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobSelectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
0 bArchived, -- Not archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', '-') CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM Application a, Opening o, CandidateProfile cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileid=cp.nCandidateProfileid
UNION ALL
SELECT /*+ FIRST_ROWS */
a.nApplicationIdH nApplicationId,
a.nPostingTargetIdH nPostingTargetId,
a.nCandidateProfileIdH nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobselectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
1 bArchived, -- Archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', NULL) CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM ApplicationH a, Opening o, CandidateProfileH cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileidH=cp.nCandidateProfileidH
AND cp.nCandidateProfileidH > 0) a;
END;
BEGIN
SELECT SYSDATE
INTO StartDate
FROM DUAL;
DM_Application_Full_Refresh;
COMMIT;
SELECT SYSDATE
INTO EndDate
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('Full refresh of DW_DM_APPLICATION finished. Time: '|| TO_CHAR(ROUND((EndDate-StartDate)*3600*24)));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Errors occured: '||SUBSTR(SQLERRM(SQLCODE),1, 200));
END;
/
如果您确实需要永久存储过程,请执行以下操作:
CREATE OR REPLACE
PROCEDURE DM_Application_Full_Refresh IS
v_RecordStatus VARCHAR2(10);
BEGIN
v_RecordStatus:='Normal';
INSERT INTO dw_DM_Application
(
dmApplicationkey,
vRecordStatus,
nApplicationId,
nPostingTargetId,
nCandidateProfileId,
nOpeningId,
nJobselectionProcessId,
vApplicationStatus,
dApplicationDate,
bManually,
vOrigin,
bArchived,
dCreationDate,
dCreationDateMM,
dUpdateDate,
dUpdateDateMM,
bActiveApplication,
vApplicationSrcType,
vSrcChannelName,
vSourcingMedium,
nJobDeptlevel1Id,
nJobDeptlevel2Id,
nJobDeptlevel3Id,
bJobIsArchived,
bJobIsGeneralApp,
nJobRecruitingUser1Id,
nJobRecruitingUser2Id,
nJobRecruitingUser3Id,
vJobCountry,
vJobRegion,
vJobContractType,
vCandType,
vCandGender,
dHireDate,
dHireDateMM
)
SELECT row_number() over (order by 1),
v_RecordStatus,
a.*
FROM (
SELECT /*+ use_nl(a cp) INDEX(a IDX_RLSH_25_FK_) index (cp pk_candidateprofile) */
a.nApplicationId,
a.nPostingTargetId,
a.nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobSelectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
0 bArchived, -- Not archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', '-') CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM Application a, Opening o, CandidateProfile cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileid=cp.nCandidateProfileid
UNION ALL
SELECT /*+ FIRST_ROWS */
a.nApplicationIdH nApplicationId,
a.nPostingTargetIdH nPostingTargetId,
a.nCandidateProfileIdH nCandidateProfileId,
a.nOpeningId,
a.nSelectionProcessId nJobselectionProcessId,
a.vApplicationStatus,
a.dApplicationDate,
a.bManually,
a.sOrigin vOrigin,
1 bArchived, -- Archived
TRUNC(a.dCreationDate) dCreationDate,
TRUNC(a.dCreationDate, 'MM') dCreationDateMM,
TRUNC(a.dUpdateDate) dUpdateDate,
TRUNC(a.dUpdateDate, 'MM') dUpdateDateMM,
a.bActiveApplication,
a.vApplicationSrcType,
NVL(a.sOrigin,DECODE(a.bManually,0,'-',1,'TalentLink',a.bManually)) SrcChannelName,
a.vSourcingMedium,
(Select nDepartmentid From Department where nlevel = 1
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentid = o.nDepartmentID) DeptLevel1Id,
(Select nDepartmentID From Department where nlevel = 2
Connect by prior nFatherDptID = nDepartmentID start with nDepartmentID = o.nDepartmentID) DeptLevel2Id,
(Select nDepartmentid FROM Department WHERE nDepartmentid = o.nDepartmentID AND nlevel = 3) DeptLevel3Id,
o.bArchived bJobIsArchived,
o.bSpontaneousOpening bJobIsGeneralapp,
o.nRecruitingUserId nJobRecruitingUser1Id,
o.nRecruitingUserId2 nJobRecruitingUser2Id,
o.nRecruitingUserId3 nJobRecruitingUser3Id,
o.vCountry JobCountry,
o.vRegion JobRegion,
o.vContractType JobContractType,
cp.vCandidateType,
DECODE(cp.vSex, 'M', 'M', 'F', 'F', NULL) CandGender,
TRUNC(a.dUpdateDate) dHireDate,
TRUNC(a.dUpdateDate, 'MM') dHireDateMM
FROM ApplicationH a, Opening o, CandidateProfileH cp
WHERE a.nOpeningId=o.nOpeningId
AND a.nCandidateProfileidH=cp.nCandidateProfileidH
AND cp.nCandidateProfileidH > 0) a;
END;
/
然后执行以下操作来运行它:
BEGIN
SELECT SYSDATE
INTO StartDate
FROM DUAL;
DM_Application_Full_Refresh;
COMMIT;
SELECT SYSDATE
INTO EndDate
FROM DUAL;
DBMS_OUTPUT.PUT_LINE('Full refresh of DW_DM_APPLICATION finished. Time: '|| TO_CHAR(ROUND((EndDate-StartDate)*3600*24)));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Errors occured: '||SUBSTR(SQLERRM(SQLCODE),1, 200));
END;
/
【讨论】:
【参考方案2】:代码看起来应该可以编译和运行了。
错误消息显示第 190 行,但您的示例中没有 190 行。我们不是在看真实的代码吗?
此外,您应该删除 EXCEPTION 块。 SQL*Plus 会自动显示您需要的所有调试信息。
【讨论】:
以上是关于PLS-00103:在预期以下情况之一时遇到符号“END”的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”: