SQL ORACLE 12 C错误:PLS-00103:遇到符号“),”但预期为以下之一[已关闭]

uklbhaso  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(718)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

26天前关闭。
Improve this question
我检查了一些SQL验证网站,他们发现这个脚本工作,它是正确的,但当我在数据库中进行查询,它返回我的一些错误,我将显示如下。我该怎么办?
我的数据库:Oracle版本12c。我使用的是SqlDbx。
脚本:

CREATE OR REPLACE PROCEDURE SPE210EST()
IS
  v_QtdDis LONG;
  v_TraDep LONG;
  v_QtdFat LONG;
  v_QtdDev LONG;
  v_QtdOrd LONG;
  v_QtdEst LONG;
  v_QtdBlo LONG;
  v_QtdRae LONG;
  v_QtdRes LONG;
  v_CodEmp NUMBER;
  v_CodPro VARCHAR(14);
  v_CodDer VARCHAR(7);
  v_CodDep VARCHAR(10);
BEGIN
 SELECT E210EST.CodEmp INTO v_CodEmp, E210EST.CodPro INTO v_CodPro, E210EST.CodDer INTO v_CodDer, E210EST.CodDep INTO v_CodDep, E210EST.QtdEst INTO v_QtdEst, E210EST.QtdBlo INTO v_QtdBlo, E210EST.QtdRae INTO v_QtdRae, E210EST.QtdRes INTO v_QtdRes, E210EST.QtdOrd INTO v_QtdOrd
   FROM E210EST, E075PRO 
  WHERE E210EST.CodEmp = E075PRO.CodEmp 
    AND E210EST.CodPro = E075PRO.CodPro
    AND E210EST.CodDep IN ('1','3','4','5','9')
    AND (CASE WHEN (E210EST.QtdEst - E210EST.QtdBlo - E210EST.QtdRae - E210EST.QtdRes) < 0 THEN 0 ELSE E210EST.QtdEst - E210EST.QtdBlo - E210EST.QtdRae - E210EST.QtdRes END) <> (CASE WHEN E210EST.CodDep = '1' THEN E075PRO.USU_Dep1 WHEN E210EST.CodDep = '3' THEN E075PRO.USU_Dep3 WHEN E210EST.CodDep = '4' THEN E075PRO.USU_Dep4 WHEN E210EST.CodDep = '5' THEN E075PRO.USU_Dep5 WHEN E210EST.CodDep = '9' THEN E075PRO.USU_Dep9 END);

 v_QtdDis := (:v_QtdEst - :v_QtdBlo - :v_QtdRae - :v_QtdRes);
 v_QtdOrd := :v_QtdOrd;
 v_QtdFat := 0;
 v_TraDep := 0;
 v_QtdDev := 0;

 IF (:v_CodDep = '1' OR  :v_CodDep = '3' OR :v_CodDep = '4' OR :v_CodDep = '5' OR :v_CodDep = '9') THEN
  SELECT CASE WHEN SUM(CASE WHEN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(UPPER(E000IPC.UNINFC),'Ç','C'),' ',''),'UND','UN'),'PT','UN'),'M','MT'),'RL','UN') <> E075PRO.UNIMED
                            THEN (SELECT CASE WHEN E015TCU.TIPCNV = '*' THEN E000IPC.QTDREC * E015TCU.VLRCNV 
                                              WHEN E015TCU.TIPCNV = '/' THEN E000IPC.QTDREC / E015TCU.VLRCNV END 
                                    FROM E015TCU 
                                   WHERE E015TCU.UNIMED = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(UPPER(E000IPC.UNINFC),'Ç','C'),' ',''),'UND','UN'),'PT','UN'),'M','MT'),'RL','UN') 
                                     AND E015TCU.UNIME2 = E075PRO.UNIMED)
                       ELSE E000IPC.QTDREC END) IS NULL THEN 0
              ELSE SUM(CASE WHEN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(UPPER(E000IPC.UNINFC),'Ç','C'),' ',''),'UND','UN'),'PT','UN'),'M','MT'),'RL','UN') <> E075PRO.UNIMED
                            THEN (SELECT CASE WHEN E015TCU.TIPCNV = '*' THEN E000IPC.QTDREC * E015TCU.VLRCNV 
                                              WHEN E015TCU.TIPCNV = '/' THEN E000IPC.QTDREC / E015TCU.VLRCNV END 
                                    FROM E015TCU 
                                   WHERE E015TCU.UNIMED = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(UPPER(E000IPC.UNINFC),'Ç','C'),' ',''),'UND','UN'),'PT','UN'),'M','MT'),'RL','UN') 
                                     AND E015TCU.UNIME2 = E075PRO.UNIMED)
                       ELSE E000IPC.QTDREC END)
               END INTO v_TraDep
    FROM E000NFC,E000IPC,E070FIL,E095FOR,E403FPR,E075PRO                 
   WHERE E000NFC.SITNFC = '1'                                     
     AND E000NFC.TIPNFE = 1                                       
     AND E000NFC.STANFV <> 3                                      
     AND E000NFC.INDCAN <> 'S'                                    
     AND E000NFC.CGCFIL = E000IPC.CGCFIL                          
     AND E000NFC.CGCFOR = E000IPC.CGCFOR                          
     AND E000NFC.CHVNEL = E000IPC.CHVNEL                          
     AND E403FPR.CODEMP = E075PRO.CODEMP
     AND E403FPR.CODPRO = E075PRO.CODPRO
     AND E403FPR.CODEMP = :v_CodEmp
     AND E403FPR.CODPRO = :v_CodPro
     AND E403FPR.CODDER = :v_CodDer
     AND E000IPC.CODDEP = :v_CodDep
     AND E000IPC.CODDEP IN ('1','3','4','5','9')
     AND E000IPC.NOPPRO IN ('5101','5102','5401','5402','5403','5405','6101','6102','6401','6402','6403','6404')
     AND E070FIL.NUMCGC = E000NFC.CGCFIL                          
     AND E095FOR.CGCCPF = E000NFC.CGCFOR                          
     AND E403FPR.CODEMP = E070FIL.CODEMP                          
     AND E403FPR.CODFOR = E095FOR.CODFOR                          
     AND E403FPR.PROFOR = E000IPC.PROFOR;

  SELECT CASE WHEN SUM(E140IPV.QTDFAT) IS NULL THEN 0 ELSE SUM(E140IPV.QTDFAT) END INTO V_QtdFat
    FROM E140NFV, E140IPV, E090REP, E001TNS, E120PED
   WHERE E140NFV.CODEMP = E140IPV.CODEMP                           
     AND E140NFV.CODFIL = E140IPV.CODFIL                          
     AND E140NFV.CODSNF = E140IPV.CODSNF                          
     AND E140NFV.NUMNFV = E140IPV.NUMNFV                          
     AND E140NFV.CODREP = E090REP.CODREP                          
     AND E120PED.CODEMP = E140IPV.CODEMP                          
     AND E120PED.CODFIL = E140IPV.FILPED                          
     AND E120PED.NUMPED = E140IPV.NUMPED                          
     AND E120PED.USU_PEDPRJ <> 'P'                                
     AND E140NFV.CODSNF = 'NFE'                                   
     AND E140NFV.CODFIL IN (1,3,4,5,9)                                 
     AND E140NFV.DATEMI >= (SYSDATE-91)                             
     AND E140NFV.DATEMI < (SYSDATE)                              
     AND E140NFV.SITNFV = '2'                                     
     AND E140NFV.TIPNFS IN (1,10)                                 
     AND E140IPV.CODPRO = :v_CodPro
     AND E140IPV.CODDER = :v_CodDer
     AND E140IPV.CODDEP IN ('1','3','4','5','9')
     AND E090REP.USU_GrpRep = TO_NUMBER(:v_CodDep)
     AND E140IPV.CODEMP = E001TNS.CODEMP                          
     AND E140IPV.TNSPRO = E001TNS.CODTNS                          
     AND E001TNS.VENFAT = 'S'                                     
     AND E140IPV.CODEMP = :v_CodEmp;

  SELECT CASE WHEN SUM(E440IPC.QTDEST) IS NULL THEN 0 ELSE SUM(E440IPC.QTDEST) END INTO v_QtdDev 
    FROM E440NFC,E075PRO,E440IPC,E001TNS,E090REP                      
   WHERE E440NFC.CODEMP = :v_CodEmp
     AND E440NFC.CODFIL IN (1,3,4,5,9)                                
     AND E440NFC.DATENT >= (SYSDATE-91)
     AND E440NFC.DATENT < (SYSDATE)
     AND E440IPC.CODEMP = E440NFC.CODEMP                              
     AND E440IPC.CODFIL = E440NFC.CODFIL                              
     AND E440IPC.CODFOR = E440NFC.CODFOR                              
     AND E440IPC.NUMNFC = E440NFC.NUMNFC                              
     AND E440IPC.CODSNF = E440NFC.CODSNF                              
     AND E440IPC.CODEMP = E075PRO.CODEMP                              
     AND E440IPC.CODPRO = E075PRO.CODPRO 
     AND E440IPC.CODDEP IN ('1','3','4','5','9')   
     AND E075PRO.CODPRO = :v_CodPro
     AND E440IPC.CODDER = :v_CodDer
     AND E090REP.USU_GRPREP = TO_NUMBER(:v_CodDep)
     AND (E440NFC.TIPNFE = 3 OR E440NFC.TIPNFE = 2)                   
     AND E440NFC.SITNFC = '2'                                         
     AND E440IPC.CODEMP = E001TNS.CODEMP                              
     AND E440IPC.TNSPRO = E001TNS.CODTNS                              
     AND E440NFC.USU_CODREP = E090REP.CODREP                          
     AND E001TNS.CPRTCF = 'D';

  IF (v_QtdDis < 0) THEN
    v_QtdDis := 0;
  END IF;

  IF (:v_CodDep = '1') THEN
   UPDATE E075PRO 
      SET USU_DEP1 = v_QtdDis,
          USU_TRADP1 = v_TraDep, 
          USU_MINCCO = ((V_QtdFat - v_QtdDev)/90) * 20
    WHERE CODEMP = :v_CodEmp 
      AND CODPRO = :v_CodPro; 
  END IF;
  IF (:v_CodDep = '3') THEN
   UPDATE E075PRO 
      SET USU_DEP3 = v_QtdDis,
          USU_TRADP3 = v_TraDep, 
          USU_MINJOI = ((V_QtdFat - v_QtdDev)/90) * 20
    WHERE CODEMP = :v_CodEmp 
      AND CODPRO = :v_CodPro; 
  END IF;
  IF (:v_CodDep = '4') THEN
   UPDATE E075PRO 
      SET USU_DEP4 = v_QtdDis,
          USU_TRADP4 = v_TraDep, 
          USU_MINSJ = ((V_QtdFat - v_QtdDev)/90) * 20
    WHERE CODEMP = :v_CodEmp 
      AND CODPRO = :v_CodPro; 
  END IF;
  IF (:v_CodDep = '5') THEN
   UPDATE E075PRO 
      SET USU_DEP5 = v_QtdDis,
          USU_TRADP5 = v_TraDep, 
          USU_MINJDS = ((V_QtdFat - v_QtdDev)/90) * 20
    WHERE CODEMP = :v_CodEmp 
      AND CODPRO = :v_CodPro; 
  END IF;
  IF (:v_CodDep = '9') THEN
   UPDATE E075PRO 
      SET USU_DEP9 = v_QtdDis,
          USU_TRADP9 = v_TraDep, 
          USU_MINFLN = ((V_QtdFat - v_QtdDev)/90) * 20
    WHERE CODEMP = :v_CodEmp 
      AND CODPRO = :v_CodPro; 
  END IF;
 END IF;
END SPE210EST

它返回的错误:

ffvjumwh

ffvjumwh1#

语法为:

CREATE PROCEDURE procedure_name
IS
  v_a VARCHAR2(20);
  v_b VARCHAR2(20);
  v_c VARCHAR2(20);
BEGIN
  SELECT dummy, dummy, dummy
  INTO   v_a, v_b, v_c
  FROM   DUAL;
END;
/

如果没有参数且过程名为SELECT <list of columns> INTO <list of variables> FROM ...,则不需要在过程名后面加上()大括号。

相关问题