Oracle PLS-00103:遇到符号“;完";当你期待下面的一个

Oracle PLS-00103:遇到符号“;完";当你期待下面的一个,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我得到这个错误: [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

我得到这个错误:

[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

这里有两段代码:

  • 定义过程的代码
  • 运行该过程的代码
  • 但是,您已经将它们一起运行,这是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;
    /
    

    代码看起来应该编译并运行

    错误消息显示第190行,但示例中没有190行。我们不是在看真正的代码吗


    此外,还应删除异常块。SQL*Plus会自动显示您需要的所有调试信息。

    在过程开始之前,我确实有一条declare语句,因此我现在编辑了原始问题。我仍然得到这个错误。
    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;
    /