Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/06/2015, 07:08
worel001
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Migrar Procedimiento Almacenado desde SQLServer a Oracle

Que tal "gnzsoloyo" y garcias por responder. Mira mas abajo dejo el codigo de lo que he hecho ahsta el momento.
Al ejecutarlo el unico error que me tira es este, ojala me puedas ayudar con eso: "PLS-00103: Encountered the symbol 'Cursor' ". (Dejare marcada la parte del codigo donde aparece el error)

Y este es el codigo. Saludos y gracias
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE spMII_RegistraProductosBuenos AS
  2.    ------------------------------------------------------------
  3.    --       DECLARE
  4.    ------------------------------------------------------------
  5.    
  6.    v_ERR_LINE NUMBER(10,0);
  7.    v_ERR_DESC VARCHAR2(1000);
  8.    v_vPLN_ID VARCHAR2(100);
  9.    v_vLIN_ID VARCHAR2(100);
  10.    v_vEQU_ID VARCHAR2(100);
  11.    v_vEQU_TEORICO NUMBER(6,4);
  12.    v_vEQU_NOTIF_AUTOM VARCHAR2(1);
  13.    v_vTAG_ID VARCHAR2(100);
  14.    v_vCOM_AUFNR VARCHAR2(12);
  15.    v_vMINUTOS_ES_MICROPARADA NUMBER(10,0);
  16.    v_vEQU_ID_ONOFF VARCHAR2(100);
  17.    v_vTIEMPO_MICROPARADA NUMBER(10,0);
  18.    v_vES_LABORABLE VARCHAR2(2);
  19.    v_vBUF_FECHA_SYS_MII DATE;
  20.    v_vBUF_VALOR VARCHAR2(100);
  21.    v_vFECHA_CORTE VARCHAR2(100);
  22.    v_vFECHA_CORTE_DATE DATE;
  23.    v_vTURNO_ACTUAL NUMBER(10,0);
  24.    v_vMINUTOS_EVENTO NUMBER(10,0);
  25.    v_vMINUTOS_EVENTO_ACTUAL NUMBER(10,0);
  26.    v_vCANTIDAD_REGISTROS_PERIODO NUMBER(10,0);
  27.    v_vULTIMA_FECHA_JOB VARCHAR2(100);
  28.    v_vULT_TDE_ID VARCHAR2(100);
  29.    v_vULT_OPR_FEC_INI_OCURRENCIA DATE;
  30.    v_vULT_OPR_FEC_FIN_OCURRENCIA DATE;
  31.    v_vULT_OPR_FEC_FIN_OCURRENCIA_ DATE;
  32.    v_vULT_TUR_ID NUMBER(10,0);
  33.    v_vULT_TDE_ID_TRADUCIDO VARCHAR2(100);
  34.    v_vULT_OPR_ID NUMBER(18,0);
  35.    v_vJOB_FEC_LECT_INI DATE;
  36.    v_vJOB_FEC_LECT_FIN DATE;
  37.    v_vJOB_FEC_LECT_INI_STR VARCHAR2(100);
  38.    v_vJOB_FEC_LECT_FIN_STR VARCHAR2(100);
  39.    v_vULT_NOBUFFER_TDE_ID VARCHAR2(100);
  40.    v_vULT_NOBUFFER_OPR_FEC_INI_OC DATE;
  41.    v_vULT_NOBUFFER_OPR_FEC_FIN_OC DATE;
  42.    v_vULT_NOBUFFER_TUR_ID NUMBER(10,0);
  43.    v_vULT_NOBUFFER_TDE_ID_TRADUCI VARCHAR2(100);
  44.    v_vULT_NOBUFFER_OPR_ID NUMBER(18,0);
  45.    v_vULT_NOBUFFER_TURNO_ACTUAL NUMBER(10,0);
  46.    v_vULT_NOBUFFER_MINUTOS_EVENTO NUMBER(10,0);
  47.    v_vTURNO_ACTUAL_FECHA_INICIO DATE;
  48.    v_vCORRELATIVO_LOTE NUMBER(30,0);
  49.    
  50.    -----------------------------------------------------------
  51.    -->      CURSOR  ULTIMA EJECUCION JOB
  52.    ------------------------------------------------------------
  53.     CURSOR v_cursorULTIMA_EJECUCION_JOB IS
  54.         SELECT  JOB_FEC_LECT_INI,
  55.                 JOB_FEC_LECT_FIN
  56.         FROM MII_000_JOB_EXECUTION
  57.         WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS';
  58.  
  59.     BEGIN
  60.         OPEN v_cursorULTIMA_EJECUCION_JOB;
  61.         FETCH v_cursorULTIMA_EJECUCION_JOB INTO v_vJOB_FEC_LECT_INI, v_vJOB_FEC_LECT_FIN;
  62.        
  63.         WHILE (v_cursorULTIMA_EJECUCION_JOB%FOUND IS NULL)
  64.         LOOP
  65.             BEGIN
  66.                 --> Avanza a proximo registro del cursor
  67.                 FETCH v_cursorULTIMA_EJECUCION_JOB INTO v_vJOB_FEC_LECT_INI, v_vJOB_FEC_LECT_FIN;
  68.             END;
  69.         END LOOP;
  70.     CLOSE v_cursorULTIMA_EJECUCION_JOB;
  71.         --> Cierra y Libera Los cursores
  72.        
  73.         --> Convierte y asigna fechas en formato varchar
  74.         v_vJOB_FEC_LECT_INI_STR := TO_CHAR(v_vJOB_FEC_LECT_INI, 'DD/MM/YYYY HH24:MI:SS');
  75.         v_vJOB_FEC_LECT_FIN_STR := TO_CHAR(v_vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS');
  76.         DBMS_OUTPUT.PUT_LINE(N'Fecha Proceso: ' || v_vJOB_FEC_LECT_INI_STR || ' ' || v_vJOB_FEC_LECT_FIN_STR);
  77.     END;
  78.  
  79.    ------------------------------------------------------------
  80.    --       CURSOR   LINEAS
  81.    ------------------------------------------------------------
  82.     CURSOR v_cursorPLN_LIN IS            -------->>>>>>> EN ESTA LINEA ME APARECE EL ERROR
  83.         SELECT
  84.             p.PLN_ID,
  85.             l.LIN_ID,
  86.             e.EQU_ID,
  87.             e.EQU_TEORICO,
  88.             e.EQU_NOTIF_AUTOM,
  89.             v.TAG_ID
  90.         FROM MII_PLANTA p,
  91.             MII_LINEA l,
  92.             MII_VARIABLE_PLC v,
  93.             MII_EQUIPO e
  94.         WHERE
  95.             p.PLN_ID = l.PLN_ID AND
  96.             p.PLN_ID = v.PLN_ID AND
  97.             l.LIN_ID = v.LIN_ID AND
  98.             v.EQU_ID = e.EQU_ID AND
  99.             v.PLN_ID = p.PLN_ID AND
  100.             v.LIN_ID = l.LIN_ID AND
  101.             p.PLN_VIGENTE = 1 AND
  102.             l.LIN_VIGENTE = 1 AND
  103.             v.TVA_ID = 'CAN' AND
  104.             EQU_NOTIF = 1;
  105.      
  106.         ------------------------------------------------------------
  107.         --      BEGIN
  108.         ------------------------------------------------------------
  109.         v_ERR_LINE := 10;
  110.         v_ERR_DESC := '[' || TO_CHAR(v_ERR_DESC) || '] ' || 'Abre cursor Planta - Linea';
  111.         DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
  112.    
  113.         ---------------------------------------------------------------------------------------------
  114.         --  Transforma Fecha sys en Formato Fecha '01/07/2013 16:00:02' --> '07/01/2013 16:00:02'
  115.         ---------------------------------------------------------------------------------------------
  116.         v_vFECHA_CORTE := TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
  117.         v_vFECHA_CORTE_DATE := TO_DATE(v_vFECHA_CORTE, 'DD/MM/YYYY HH24:MI:SS');
  118.    
  119.         BEGIN
  120.             OPEN v_cursorPLN_LIN;
  121.                 --> Avanza a proximo registro del cursor
  122.                 FETCH V_CURSORPLN_LIN INTO V_VPLN_ID, V_VLIN_ID, V_VEQU_ID, V_VEQU_TEORICO, V_VEQU_NOTIF_AUTOM, V_VTAG_ID;
  123.                 WHILE (v_cursorPLN_LIN%FOUND IS NULL)
  124.                 LOOP
  125.                    
  126.                     BEGIN
  127.                         V_ERR_LINE := 20 ;
  128.                         v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] Planta: ' || TO_CHAR(v_vPLN_ID) || ' Linea: ' || TO_CHAR(v_vLIN_ID) || ' Equipo: ' || TO_CHAR(v_vEQU_ID) || ' Te?rico: ' || TO_CHAR(v_vEQU_TEORICO) || ' TAG_ID: ' || TO_CHAR(v_vTAG_ID) ;
  129.                         DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
  130.                        
  131.                         --> OBTIENE LA CANTIDAD DE REGISTROS
  132.                         SELECT COUNT(*) INTO v_vCANTIDAD_REGISTROS_PERIODO
  133.                         FROM MII_BUFFER_PLC B
  134.                         WHERE B.TAG_ID = V_VTAG_ID
  135.                             AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(V_VJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS');
  136.                             AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') <= TO_DATE(v_vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS');
  137.                        
  138.                        
  139.                         IF v_vCANTIDAD_REGISTROS_PERIODO <= 0 THEN
  140.                             BEGIN
  141.                                 V_ERR_LINE := 1000 ;
  142.                                 v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] Registros (TAG_ID): ' || TO_CHAR(v_vCANTIDAD_REGISTROS_PERIODO) ;
  143.                                 DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
  144.                             END;
  145.                         ELSE
  146.                    
  147.                             BEGIN
  148.                                 v_ERR_LINE := 2000;
  149.                                 v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] Registros (TAG_ID): ' || TO_CHAR(v_vCANTIDAD_REGISTROS_PERIODO) ;
  150.                                 DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
  151.  
  152.                                 --> Reserva Proximo Correlativo de Proceso / Lote
  153.                                 SELECT v_vCORRELATIVO_LOTE := fn.ObtieneCorrelativo('LOTE_CONTEO_BUENOS_BUFFER') ;   --VERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
  154.                                 UPDATE MII_000_CORRELATIVO_MANUAL
  155.                                 SET CORRELATIVO_ID = v_vCORRELATIVO_LOTE
  156.                                 WHERE CORRELATIVO_NAME = 'LOTE_CONTEO_BUENOS_BUFFER';
  157.                                 -- Reserva Proximo Correlativo de Proceso / Lote <--
  158.  
  159.  
  160.                                 --> Asigna Numero de Lote a registros de Buffer
  161.                                 UPDATE MII_BUFFER_PLC
  162.                                 SET BUF_LOTE_ID = v_vCORRELATIVO_LOTE
  163.                                 WHERE TAG_ID = V_VTAG_ID
  164.                                     AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(V_VJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS');
  165.                                     AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') <= TO_DATE(v_vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS');
  166.                                                
  167.                                 SELECT COUNT(*) INTO v_vCANTIDAD_REGISTROS_PERIODO
  168.                                 FROM MII_BUFFER_PLC
  169.                                 WHERE BUF_LOTE_ID = v_vCORRELATIVO_LOTE
  170.                                     AND TAG_ID = v_vTAG_ID;
  171.                                              
  172.                                    
  173.                                 --> Obtiene Orden Activa del Equipo
  174.                                 SELECT NVL(COM_AUFNR, NULL) INTO v_vCOM_AUFNR
  175.                                 FROM MII_PROD_ORDEN_ACTIVA
  176.                                 WHERE EQU_ID = v_vEQU_ID;
  177.  
  178.                                 --> Persiste la cantidad de Registros
  179.                                 spMII_PUT_ProductosBuenos(v_vPLN_ID,
  180.                                                         v_vLIN_ID,
  181.                                                         v_vEQU_ID,
  182.                                                         v_vCANTIDAD_REGISTROS_PERIODO,
  183.                                                         v_vCOM_AUFNR,
  184.                                                         v_vCANTIDAD_REGISTROS_PERIODO);
  185.                            
  186.                             END;
  187.                         END IF;
  188.                         DBMS_OUTPUT.PUT_LINE(N'------------------------ CORTE PLN_LIN_EQU_TAG ---------------------------------------');
  189.                         --> Avanza a proximo registro del cursor
  190.                         FETCH v_cursorPLN_LIN INTO v_vPLN_ID,v_vLIN_ID,v_vEQU_ID,v_vEQU_TEORICO,v_vEQU_NOTIF_AUTOM,v_vTAG_ID;
  191.                     END;
  192.                 END LOOP;
  193.        
  194.                 --------------------------------------------------------------------
  195.                 --  FIN Recorre Planta Linea (a)
  196.                 --------------------------------------------------------------------
  197.                 v_ERR_LINE := 90000 ;
  198.                 v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] ' || 'Actualizacion Fechas Ejecucion JOB REGISTRA_TIEMPO_OPERACION ' ;
  199.                 DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
  200.                  
  201.                 UPDATE MII_000_JOB_EXECUTION
  202.                 SET JOB_FEC_UPD = SYSDATE,
  203.                     JOB_FEC_LECT_INI = v_vJOB_FEC_LECT_FIN,
  204.                     JOB_FEC_LECT_FIN = v_vFECHA_CORTE_DATE
  205.                 WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS';
  206.  
  207.                 V_ERR_LINE := 1000000 ;
  208.                 v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] ' || 'Proceso Finalizado con Exito' ;
  209.                 DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
  210.          
  211.                 OPEN  cv_1 FOR
  212.                     SELECT v_ERR_LINE LINEA  ,
  213.                            v_ERR_DESC DESCRIPCION  ,
  214.                            NVL(SQLCODE, 0) ERR_NUMBER  ,
  215.                            NVL(SQLERRM, 'Exito') ERR_MESSAGE  ,
  216.                            NVL(NULL/*TODO:ERROR_LINE()*/, 0) ERR_LINE  
  217.                       FROM DUAL;
  218.                 END;
  219.             END;
  220.         END;   
  221.    ------------------------------------------------------------
  222.    --       END
  223.    ------------------------------------------------------------
  224.    --> Cierra y Libera Los cursores
  225.             CLOSE v_cursorPLN_LIN;
  226. END;

Última edición por gnzsoloyo; 24/06/2015 a las 07:14 Razón: Usar HIGHLIGHT SQL, por favor.