2011-07-18 36 views
3

,當我得到這個錯誤:PLS-00103:出現符號「END」在需要的一個FO llowing

[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; 
/
+0

我在程序啓動前有一個聲明語句,所以我現在編輯了原來的問題。我仍然得到這個錯誤。 – JGJ

回答

2

你的代碼中有兩件:

  1. 代碼來定義一個過程
  2. 運行該過程的代碼

但是,您已經將它們一起運行,哪些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; 
/
0

代碼看起來應該編譯並運行。

錯誤信息說明第190行,但樣本中沒有190行。我們沒有看真實的代碼嗎?

另外,您應該刪除EXCEPTION塊。 SQL * Plus會自動顯示您需要的所有調試信息。

相關問題