Me toco migrar como 50 query's de SQLServer a Oracle, cosa que ya hice. Mi problema es que tengo que migrar un procedimiento almacenado y me esta costando demasiado, mas aun teniendo que aprender como se trabaja con ellos.
Yo ya hice ciertas cosas, como cambiar los tipos de datos (por ejemplo VARCHAR a TO_CHAR), entre otros...
Ojala alguien me pueda ayudar. De antemano gracias a tod@s.
Les dejo el código:
Código SQL:
Ver original
USE [MIIFDB] GO /****** Object: StoredProcedure [dbo].[spMII_RegistraProductosBuenos] Script Date: 06/22/2015 15:04:57 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[spMII_RegistraProductosBuenos] AS ------------------------------------------------------------ -- DECLARE ------------------------------------------------------------ DECLARE @ERR_LINE INT DECLARE @ERR_DESC VARCHAR(1000) DECLARE @vPLN_ID VARCHAR(100) DECLARE @vLIN_ID VARCHAR(100) DECLARE @vEQU_ID VARCHAR(100) DECLARE @vEQU_TEORICO NUMERIC(6,4) DECLARE @vEQU_NOTIF_AUTOM VARCHAR(1) DECLARE @vTAG_ID VARCHAR(100) DECLARE @vCOM_AUFNR VARCHAR(12) DECLARE @vMINUTOS_ES_MICROPARADA INT DECLARE @vEQU_ID_ONOFF VARCHAR(100) DECLARE @vTIEMPO_MICROPARADA INT DECLARE @vES_LABORABLE VARCHAR(2) DECLARE @vBUF_FECHA_SYS_MII datetime DECLARE @vBUF_VALOR VARCHAR(100) DECLARE @vFECHA_CORTE VARCHAR(100) DECLARE @vFECHA_CORTE_DATE DATETIME DECLARE @vTURNO_ACTUAL INT DECLARE @vMINUTOS_EVENTO INT DECLARE @vMINUTOS_EVENTO_ACTUAL INT DECLARE @vCANTIDAD_REGISTROS_PERIODO INT DECLARE @vULTIMA_FECHA_JOB VARCHAR(100) DECLARE @vULT_TDE_ID VARCHAR(100) DECLARE @vULT_OPR_FEC_INI_OCURRENCIA datetime DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA datetime DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA_PLUS_1_SEC datetime DECLARE @vULT_TUR_ID INT DECLARE @vULT_TDE_ID_TRADUCIDO VARCHAR(100) DECLARE @vULT_OPR_ID NUMERIC(18,0) DECLARE @vJOB_FEC_LECT_INI datetime DECLARE @vJOB_FEC_LECT_FIN datetime DECLARE @vJOB_FEC_LECT_INI_STR VARCHAR(100) DECLARE @vJOB_FEC_LECT_FIN_STR VARCHAR(100) DECLARE @vULT_NOBUFFER_TDE_ID VARCHAR(100) DECLARE @vULT_NOBUFFER_OPR_FEC_INI_OCURRENCIA datetime DECLARE @vULT_NOBUFFER_OPR_FEC_FIN_OCURRENCIA datetime DECLARE @vULT_NOBUFFER_TUR_ID INT DECLARE @vULT_NOBUFFER_TDE_ID_TRADUCIDO VARCHAR(100) DECLARE @vULT_NOBUFFER_OPR_ID NUMERIC(18,0) DECLARE @vULT_NOBUFFER_TURNO_ACTUAL INT DECLARE @vULT_NOBUFFER_MINUTOS_EVENTO INT DECLARE @vTURNO_ACTUAL_FECHA_INICIO datetime DECLARE @vCORRELATIVO_LOTE NUMERIC(30,0) ----------------------------------------------------------- --> CURSOR ULTIMA EJECUCION JOB ------------------------------------------------------------ DECLARE @cursorULTIMA_EJECUCION_JOB cursor SET @cursorULTIMA_EJECUCION_JOB = CURSOR FOR SELECT JOB_FEC_LECT_INI, JOB_FEC_LECT_FIN FROM MII_000_JOB_EXECUTION WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS' OPEN @cursorULTIMA_EJECUCION_JOB FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN WHILE (@@FETCH_STATUS = 0) BEGIN --> Avanza a proximo registro del cursor FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN END CLOSE @cursorULTIMA_EJECUCION_JOB DEALLOCATE @cursorULTIMA_EJECUCION_JOB --> Cierra y Libera Los cursores --> Convierte y asigna fechas en formato varchar SET @vJOB_FEC_LECT_INI_STR = TO_CHAR(@vJOB_FEC_LECT_INI, 'DD/MM/YYYY HH24:MI:SS') SET @vJOB_FEC_LECT_FIN_STR = TO_CHAR(@vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS') PRINT N'Fecha Proceso: ' + @vJOB_FEC_LECT_INI_STR + ' ' + @vJOB_FEC_LECT_FIN_STR ------------------------------------------------------------ -- CURSOR LINEAS ------------------------------------------------------------ DECLARE @cursorPLN_LIN cursor SET @cursorPLN_LIN = CURSOR FOR 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 ------------------------------------------------------------ SET @ERR_LINE = 10 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Abre cursor Planta - Linea' PRINT @ERR_DESC --------------------------------------------------------------------------------------------- -- Transforma Fecha sys en Formato Fecha '01/07/2013 16:00:02' --> '07/01/2013 16:00:02' --------------------------------------------------------------------------------------------- SET @vFECHA_CORTE = TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS') SET @vFECHA_CORTE_DATE = TO_DATE(@vFECHA_CORTE, 'DD/MM/YYYY HH24:MI:SS') BEGIN TRY OPEN @cursorPLN_LIN --> Avanza a proximo registro del cursor FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID WHILE (@@FETCH_STATUS = 0) BEGIN SET @ERR_LINE = 20 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Planta: ' + TO_CHAR(@vPLN_ID) + ' Linea: ' + TO_CHAR(@vLIN_ID)+ ' Equipo: ' + TO_CHAR(@vEQU_ID)+ ' Teórico: ' + TO_CHAR(@vEQU_TEORICO)+ ' TAG_ID: ' + TO_CHAR(@vTAG_ID) PRINT @ERR_DESC --> OBTIENE LA CANTIDAD DE REGISTROS SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*) FROM MII_BUFFER_PLC b WHERE b.TAG_ID = @vTAG_ID AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(@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(@vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS') IF @vCANTIDAD_REGISTROS_PERIODO <= 0 BEGIN SET @ERR_LINE = 1000 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO) PRINT @ERR_DESC END ELSE BEGIN SET @ERR_LINE = 2000 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO) PRINT @ERR_DESC --> Reserva Proximo Correlativo de Proceso / Lote SELECT @vCORRELATIVO_LOTE = dbo.fnObtieneCorrelativo('LOTE_CONTEO_BUENOS_BUFFER') UPDATE MII_000_CORRELATIVO_MANUAL SET CORRELATIVO_ID = @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 = @vCORRELATIVO_LOTE WHERE TAG_ID = @vTAG_ID AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(@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(@vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS') SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*) FROM MII_BUFFER_PLC WHERE BUF_LOTE_ID = @vCORRELATIVO_LOTE AND TAG_ID = @vTAG_ID --> Obtiene Orden Activa del Equipo SELECT @vCOM_AUFNR = NVL(COM_AUFNR,NULL) FROM MII_PROD_ORDEN_ACTIVA WHERE EQU_ID = @vEQU_ID --> Persiste la cantidad de Registros EXECUTE dbo.spMII_PUT_ProductosBuenos @vPLN_ID, @vLIN_ID, @vEQU_ID, @vCANTIDAD_REGISTROS_PERIODO, @vCOM_AUFNR, @vCANTIDAD_REGISTROS_PERIODO END PRINT N'------------------------ CORTE PLN_LIN_EQU_TAG ---------------------------------------' --> Avanza a proximo registro del cursor FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID END -------------------------------------------------------------------- -- FIN Recorre Planta Linea (a) -------------------------------------------------------------------- SET @ERR_LINE = 90000 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Actualizacion Fechas Ejecucion JOB REGISTRA_TIEMPO_OPERACION ' PRINT @ERR_DESC UPDATE MII_000_JOB_EXECUTION SET JOB_FEC_UPD = sysdate, JOB_FEC_LECT_INI = @vJOB_FEC_LECT_FIN, JOB_FEC_LECT_FIN = @vFECHA_CORTE_DATE WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS' SET @ERR_LINE = 1000000 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Proceso Finalizado con Exito' PRINT @ERR_DESC SELECT @ERR_LINE LINEA, @ERR_DESC DESCRIPCION, NVL(ERROR_NUMBER(),0) ERR_NUMBER, NVL(ERROR_MESSAGE(),'Exito') ERR_MESSAGE, NVL(ERROR_LINE(),0) ERR_LINE END TRY BEGIN CATCH SELECT @ERR_LINE LINEA, @ERR_DESC DESCRIPCION, NVL(ERROR_NUMBER(),0) ERR_NUMBER, NVL(ERROR_MESSAGE(),'Exito') ERR_MESSAGE, NVL(ERROR_LINE(),0) ERR_LINE END CATCH; ------------------------------------------------------------ -- END ------------------------------------------------------------ --> Cierra y Libera Los cursores CLOSE @cursorPLN_LIN DEALLOCATE @cursorPLN_LIN