troubleshooting Question

I compile without errors a storeprocedure and I get an error when execute it

Avatar of osmendez
osmendez asked on
Oracle Database
4 Comments1 Solution376 ViewsLast Modified:
I compile this storeprocedure without errors, but when i execute apperence an error

ORA-06550: line ORA-06550: line 2, column 1: PLS-00103: Encountered the symbol " " when expecting one of the following: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe , column :

this is the code could you tell me where i am wrong please

CREATE OR REPLACE PROCEDURE ACLARAPER.spRepGuardaCifrasCtrl (
   p_fechainicio      IN       VARCHAR2,   -- Fecha inicial del reporte
   p_modulo           IN       INT
)
AS
   tmp_errorsp   EXCEPTION;
   tmp_errmsg    VARCHAR2 (200);
   tmp_numrow       INT;
   tmp_histcifras ACLARAPER.HISTCIFRASCTRL%ROWTYPE;

 
   CURSOR c1 IS                              
             SELECT t.FIIDPRODUCTO, t.FIIDMODULO, NVL (h.FIINICIAL, 0) AS FIINICIAL, NVL (h.FIRECIBIDAS, 0) AS FIRECIBIDAS, NVL (h.FIFINALIZADAS, 0) AS FIFINALIZADAS
             FROM ACLARAPER.HISTCIFRASCTRL h
             RIGHT OUTER JOIN (
                                      SELECT C.FIIDPRODUCTO, tacl.FIIDMODULO
                                      FROM ACLARAPER.CATPRODUCTO C
                                      INNER JOIN ACLARAPER.TIPOACLARACION tacl ON C.FIIDPRODUCTO = tacl.FIIDPRODUCTO
                                      WHERE tacl.FIIDMODULO = p_modulo
                                     ) t ON (t.FIIDPRODUCTO = h.FIIDPRODUCTO
                                              AND t.FIIDMODULO = h.FIIDMODULO
                                           AND TRUNC(h.FDFECHACIFRAS) = TO_DATE(p_fechainicio,'DD/MM/YYYY')-1)              
               GROUP BY t.FIIDPRODUCTO, t.FIIDMODULO, h.FIINICIAL, h.FIRECIBIDAS, h.FIFINALIZADAS
             ORDER BY 1;       
                           
BEGIN
      IF (p_fechainicio IS NULL) THEN
     tmp_errmsg := 'Defina la fecha para el reporte';
        RAISE tmp_errorsp;  
      END IF;
     
   FOR i IN c1 LOOP
          
             SELECT COUNT (a.FIIDACL) INTO tmp_numrow
           FROM ACLARAPER.ACLARACION a
             INNER JOIN ACLARAPER.PREACLARACION pa ON (a.FIIDPREACL = pa.FIIDPREACL AND a.FCTIPOPREACL = pa.FCTIPOPREACL)
             INNER JOIN ACLARAPER.TIPOACLARACION ta ON ta.FIIDTIPOACL = pa.FIIDTIPOACL                            
             WHERE ta.FIIDMODULO = NVL(p_modulo,i.FIIDMODULO)
                 AND ta.FIIDPRODUCTO = i.FIIDPRODUCTO;
                                                     
                     IF tmp_numrow = 0 THEN
                         SELECT 0,
                                 TO_DATE(p_fechainicio,'DD/MM/YYYY') AS FDFECHA,
                                 i.FIIDPRODUCTO,
                                 i.FIIDMODULO,
                                 0,
                                 0,
                                 0,
                                 0 INTO tmp_histcifras
                        FROM DUAL;
                                          
                   ELSE
                         SELECT 0,
                                     TO_DATE(p_fechainicio,'DD/MM/YYYY') AS FDFECHA,
                                  t.FIIDPRODUCTO,
                                  t.FIIDMODULO,
                                  t.FIINICIAL,
                                  SUM(t.FIRECIBIDAS) AS FIRECIBIDAS,
                                  SUM(t.FIFINALIZADAS) AS FIFINALIZADAS,
                                  SUM(t.FIENSOPORTE) AS FIENSOPORTE  INTO tmp_histcifras
                         FROM (SELECT   i.FIIDPRODUCTO AS FIIDPRODUCTO,
                                        i.FIIDMODULO AS FIIDMODULO,
                                       NVL ((i.FIINICIAL + i.FIRECIBIDAS) - i.FIFINALIZADAS , 0)  AS FIINICIAL,
                                       NVL(CASE WHEN (TRUNC(a.FDFECHACAPTURA) = TO_DATE(p_fechainicio,'DD/MM/YYYY')) THEN SUM(1) END,0) AS FIRECIBIDAS,
                                       NVL(CASE WHEN (sxe.FIIDESTATUS = 4 AND TRUNC(a.FDFECHARESOLUCION) = TO_DATE(p_fechainicio,'DD/MM/YYYY')) THEN SUM(1) END,0) AS FIFINALIZADAS,
                                       NVL(CASE WHEN (sxe.FIIDESTATUS = 3 AND TRUNC(a.FDFECHACAPTURA) = TO_DATE(p_fechainicio,'DD/MM/YYYY')) THEN SUM(1) END,0) AS FIENSOPORTE
                          FROM ACLARAPER.ACLARACION a
                          INNER JOIN ACLARAPER.PREACLARACION pa ON (a.FIIDPREACL = pa.FIIDPREACL AND a.FCTIPOPREACL = pa.FCTIPOPREACL)
                          INNER JOIN ACLARAPER.TIPOACLARACION ta ON ta.FIIDTIPOACL = pa.FIIDTIPOACL
                          INNER JOIN ACLARAPER.CATPRODUCTO p ON ta.FIIDPRODUCTO = p.FIIDPRODUCTO
                          INNER JOIN ACLARAPER.SOPORTESXESTATUS sxe ON sxe.FIIDSOPORTEXESTATUS = a.FIIDSOPORTEXESTATUS
                          WHERE ta.FIIDMODULO = NVL(p_modulo,i.FIIDMODULO)
                                AND p.FIIDPRODUCTO = i.FIIDPRODUCTO
                            GROUP BY p.FIIDPRODUCTO, ta.FIIDMODULO, i.FIINICIAL, p.FCDESCPRODUCTO, TRUNC(a.FDFECHACAPTURA), sxe.FIIDESTATUS, TRUNC(a.FDFECHARESOLUCION), i.FIRECIBIDAS, i.FIFINALIZADAS
                               ) t
                  GROUP BY t.FIIDPRODUCTO, t.FIIDMODULO, t.FIINICIAL;
                  END IF;            
                  
      INSERT INTO ACLARAPER.HISTCIFRASCTRL (  FIIDHISTCIFRASCTRL,
                                                             FDFECHACIFRAS,
                                                             FIIDPRODUCTO,
                                                             FIIDMODULO,
                                                             FIINICIAL,
                                                             FIRECIBIDAS,
                                                             FIFINALIZADAS,
                                                             FIENSOPORTE
                                                              )
      VALUES( ACLARAPER.SEQ_HISTCIFRASCTRL.NEXTVAL,
                  tmp_histcifras.FDFECHACIFRAS,
                  tmp_histcifras.FIIDPRODUCTO,
                  tmp_histcifras.FIIDMODULO,
                  tmp_histcifras.FIINICIAL,
                  tmp_histcifras.FIRECIBIDAS,
                  tmp_histcifras.FIFINALIZADAS,
                  tmp_histcifras.FIENSOPORTE
                     );
        COMMIT;            
      END LOOP;  
EXCEPTION
   WHEN tmp_errorsp
   THEN
      raise_application_error (-20101, tmp_errmsg);
   WHEN DUP_VAL_ON_INDEX
   THEN
      ROLLBACK;
      raise_application_error
                (-20101,
                 'Resultados duplicados, primero borre la información de esta fecha'
                );
   WHEN OTHERS
   THEN
      ROLLBACK;
      raise_application_error (-20102, 'Error:' || SQLERRM);

END spRepGuardaCifrasCtrl;
/


Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 4 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 4 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros