CREATE OR REPLACE PROCEDURE spMII_RegistraProductosBuenos AS
------------------------------------------------------------
-- DECLARE
------------------------------------------------------------
v_ERR_LINE NUMBER(10,0);
v_ERR_DESC VARCHAR2(1000);
v_vPLN_ID VARCHAR2(100);
v_vLIN_ID VARCHAR2(100);
v_vEQU_ID VARCHAR2(100);
v_vEQU_TEORICO NUMBER(6,4);
v_vEQU_NOTIF_AUTOM VARCHAR2(1);
v_vTAG_ID VARCHAR2(100);
v_vCOM_AUFNR VARCHAR2(12);
v_vMINUTOS_ES_MICROPARADA NUMBER(10,0);
v_vEQU_ID_ONOFF VARCHAR2(100);
v_vTIEMPO_MICROPARADA NUMBER(10,0);
v_vES_LABORABLE VARCHAR2(2);
v_vBUF_FECHA_SYS_MII DATE;
v_vBUF_VALOR VARCHAR2(100);
v_vFECHA_CORTE VARCHAR2(100);
v_vFECHA_CORTE_DATE DATE;
v_vTURNO_ACTUAL NUMBER(10,0);
v_vMINUTOS_EVENTO NUMBER(10,0);
v_vMINUTOS_EVENTO_ACTUAL NUMBER(10,0);
v_vCANTIDAD_REGISTROS_PERIODO NUMBER(10,0);
v_vULTIMA_FECHA_JOB VARCHAR2(100);
v_vULT_TDE_ID VARCHAR2(100);
v_vULT_OPR_FEC_INI_OCURRENCIA DATE;
v_vULT_OPR_FEC_FIN_OCURRENCIA DATE;
v_vULT_OPR_FEC_FIN_OCURRENCIA_ DATE;
v_vULT_TUR_ID NUMBER(10,0);
v_vULT_TDE_ID_TRADUCIDO VARCHAR2(100);
v_vULT_OPR_ID NUMBER(18,0);
v_vJOB_FEC_LECT_INI DATE;
v_vJOB_FEC_LECT_FIN DATE;
v_vJOB_FEC_LECT_INI_STR VARCHAR2(100);
v_vJOB_FEC_LECT_FIN_STR VARCHAR2(100);
v_vULT_NOBUFFER_TDE_ID VARCHAR2(100);
v_vULT_NOBUFFER_OPR_FEC_INI_OC DATE;
v_vULT_NOBUFFER_OPR_FEC_FIN_OC DATE;
v_vULT_NOBUFFER_TUR_ID NUMBER(10,0);
v_vULT_NOBUFFER_TDE_ID_TRADUCI VARCHAR2(100);
v_vULT_NOBUFFER_OPR_ID NUMBER(18,0);
v_vULT_NOBUFFER_TURNO_ACTUAL NUMBER(10,0);
v_vULT_NOBUFFER_MINUTOS_EVENTO NUMBER(10,0);
v_vTURNO_ACTUAL_FECHA_INICIO DATE;
v_vCORRELATIVO_LOTE NUMBER(30,0);
-----------------------------------------------------------
--> CURSOR ULTIMA EJECUCION JOB
------------------------------------------------------------
CURSOR v_cursorULTIMA_EJECUCION_JOB IS
SELECT JOB_FEC_LECT_INI,
JOB_FEC_LECT_FIN
FROM MII_000_JOB_EXECUTION
WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS';
BEGIN
OPEN v_cursorULTIMA_EJECUCION_JOB;
FETCH v_cursorULTIMA_EJECUCION_JOB INTO v_vJOB_FEC_LECT_INI, v_vJOB_FEC_LECT_FIN;
WHILE (v_cursorULTIMA_EJECUCION_JOB%FOUND IS NULL)
LOOP
BEGIN
--> Avanza a proximo registro del cursor
FETCH v_cursorULTIMA_EJECUCION_JOB INTO v_vJOB_FEC_LECT_INI, v_vJOB_FEC_LECT_FIN;
END;
END LOOP;
CLOSE v_cursorULTIMA_EJECUCION_JOB;
--> Cierra y Libera Los cursores
--> Convierte y asigna fechas en formato varchar
v_vJOB_FEC_LECT_INI_STR := TO_CHAR(v_vJOB_FEC_LECT_INI, 'DD/MM/YYYY HH24:MI:SS');
v_vJOB_FEC_LECT_FIN_STR := TO_CHAR(v_vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS');
DBMS_OUTPUT.PUT_LINE(N'Fecha Proceso: ' || v_vJOB_FEC_LECT_INI_STR || ' ' || v_vJOB_FEC_LECT_FIN_STR);
END;
------------------------------------------------------------
-- CURSOR LINEAS
------------------------------------------------------------
CURSOR v_cursorPLN_LIN IS -------->>>>>>> EN ESTA LINEA ME APARECE EL ERROR
SELECT
p.PLN_ID,
l.LIN_ID,
e.EQU_ID,
e.EQU_TEORICO,
e.EQU_NOTIF_AUTOM,
v.TAG_ID
FROM MII_PLANTA p,
MII_LINEA l,
MII_VARIABLE_PLC v,
MII_EQUIPO e
WHERE
p.PLN_ID = l.PLN_ID AND
p.PLN_ID = v.PLN_ID AND
l.LIN_ID = v.LIN_ID AND
v.EQU_ID = e.EQU_ID AND
v.PLN_ID = p.PLN_ID AND
v.LIN_ID = l.LIN_ID AND
p.PLN_VIGENTE = 1 AND
l.LIN_VIGENTE = 1 AND
v.TVA_ID = 'CAN' AND
EQU_NOTIF = 1;
------------------------------------------------------------
-- BEGIN
------------------------------------------------------------
v_ERR_LINE := 10;
v_ERR_DESC := '[' || TO_CHAR(v_ERR_DESC) || '] ' || 'Abre cursor Planta - Linea';
DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
---------------------------------------------------------------------------------------------
-- Transforma Fecha sys en Formato Fecha '01/07/2013 16:00:02' --> '07/01/2013 16:00:02'
---------------------------------------------------------------------------------------------
v_vFECHA_CORTE := TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS');
v_vFECHA_CORTE_DATE := TO_DATE(v_vFECHA_CORTE, 'DD/MM/YYYY HH24:MI:SS');
BEGIN
OPEN v_cursorPLN_LIN;
--> Avanza a proximo registro del cursor
FETCH V_CURSORPLN_LIN INTO V_VPLN_ID, V_VLIN_ID, V_VEQU_ID, V_VEQU_TEORICO, V_VEQU_NOTIF_AUTOM, V_VTAG_ID;
WHILE (v_cursorPLN_LIN%FOUND IS NULL)
LOOP
BEGIN
V_ERR_LINE := 20 ;
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) ;
DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
--> OBTIENE LA CANTIDAD DE REGISTROS
SELECT COUNT(*) INTO v_vCANTIDAD_REGISTROS_PERIODO
FROM MII_BUFFER_PLC B
WHERE B.TAG_ID = V_VTAG_ID
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');
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');
IF v_vCANTIDAD_REGISTROS_PERIODO <= 0 THEN
BEGIN
V_ERR_LINE := 1000 ;
v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] Registros (TAG_ID): ' || TO_CHAR(v_vCANTIDAD_REGISTROS_PERIODO) ;
DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
END;
ELSE
BEGIN
v_ERR_LINE := 2000;
v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] Registros (TAG_ID): ' || TO_CHAR(v_vCANTIDAD_REGISTROS_PERIODO) ;
DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
--> Reserva Proximo Correlativo de Proceso / Lote
SELECT v_vCORRELATIVO_LOTE := fn.ObtieneCorrelativo('LOTE_CONTEO_BUENOS_BUFFER') ; --VERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
UPDATE MII_000_CORRELATIVO_MANUAL
SET CORRELATIVO_ID = v_vCORRELATIVO_LOTE
WHERE CORRELATIVO_NAME = 'LOTE_CONTEO_BUENOS_BUFFER';
-- Reserva Proximo Correlativo de Proceso / Lote <--
--> Asigna Numero de Lote a registros de Buffer
UPDATE MII_BUFFER_PLC
SET BUF_LOTE_ID = v_vCORRELATIVO_LOTE
WHERE TAG_ID = V_VTAG_ID
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');
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');
SELECT COUNT(*) INTO v_vCANTIDAD_REGISTROS_PERIODO
FROM MII_BUFFER_PLC
WHERE BUF_LOTE_ID = v_vCORRELATIVO_LOTE
AND TAG_ID = v_vTAG_ID;
--> Obtiene Orden Activa del Equipo
SELECT NVL(COM_AUFNR, NULL) INTO v_vCOM_AUFNR
FROM MII_PROD_ORDEN_ACTIVA
WHERE EQU_ID = v_vEQU_ID;
--> Persiste la cantidad de Registros
spMII_PUT_ProductosBuenos(v_vPLN_ID,
v_vLIN_ID,
v_vEQU_ID,
v_vCANTIDAD_REGISTROS_PERIODO,
v_vCOM_AUFNR,
v_vCANTIDAD_REGISTROS_PERIODO);
END;
END IF;
DBMS_OUTPUT.PUT_LINE(N'------------------------ CORTE PLN_LIN_EQU_TAG ---------------------------------------');
--> Avanza a proximo registro del cursor
FETCH v_cursorPLN_LIN INTO v_vPLN_ID,v_vLIN_ID,v_vEQU_ID,v_vEQU_TEORICO,v_vEQU_NOTIF_AUTOM,v_vTAG_ID;
END;
END LOOP;
--------------------------------------------------------------------
-- FIN Recorre Planta Linea (a)
--------------------------------------------------------------------
v_ERR_LINE := 90000 ;
v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] ' || 'Actualizacion Fechas Ejecucion JOB REGISTRA_TIEMPO_OPERACION ' ;
DBMS_OUTPUT.PUT_LINE(V_ERR_DESC);
UPDATE MII_000_JOB_EXECUTION
SET JOB_FEC_UPD = SYSDATE,
JOB_FEC_LECT_INI = v_vJOB_FEC_LECT_FIN,
JOB_FEC_LECT_FIN = v_vFECHA_CORTE_DATE
WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS';
V_ERR_LINE := 1000000 ;
v_ERR_DESC := '[' || TO_CHAR(v_ERR_LINE) || '] ' || 'Proceso Finalizado con Exito' ;
DBMS_OUTPUT.PUT_LINE(v_ERR_DESC);
OPEN cv_1 FOR
SELECT v_ERR_LINE LINEA ,
v_ERR_DESC DESCRIPCION ,
NVL(SQLCODE, 0) ERR_NUMBER ,
NVL(SQLERRM, 'Exito') ERR_MESSAGE ,
NVL(NULL/*TODO:ERROR_LINE()*/, 0) ERR_LINE
FROM DUAL;
END;
END;
END;
------------------------------------------------------------
-- END
------------------------------------------------------------
--> Cierra y Libera Los cursores
CLOSE v_cursorPLN_LIN;
END;