Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/06/2015, 15:17
worel001
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 15 años, 2 meses
Puntos: 0
Migrar Procedimiento Almacenado desde SQLServer a Oracle

Que tal chic@s. Espero me puedan ayudar, les cuento:
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
  1. USE [MIIFDB]
  2. GO
  3. /****** Object:  StoredProcedure [dbo].[spMII_RegistraProductosBuenos]    Script Date: 06/22/2015 15:04:57 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER PROCEDURE [dbo].[spMII_RegistraProductosBuenos]
  9. AS
  10. ------------------------------------------------------------
  11. --      DECLARE
  12. ------------------------------------------------------------  
  13.  
  14.  
  15.   DECLARE @ERR_LINE INT
  16.   DECLARE @ERR_DESC VARCHAR(1000)
  17.   DECLARE @vPLN_ID VARCHAR(100)
  18.   DECLARE @vLIN_ID VARCHAR(100)
  19.   DECLARE @vEQU_ID VARCHAR(100)
  20.   DECLARE @vEQU_TEORICO  NUMERIC(6,4)
  21.   DECLARE @vEQU_NOTIF_AUTOM VARCHAR(1)
  22.   DECLARE @vTAG_ID VARCHAR(100)
  23.  
  24.   DECLARE @vCOM_AUFNR VARCHAR(12)
  25.  
  26.  
  27.   DECLARE @vMINUTOS_ES_MICROPARADA INT
  28.   DECLARE @vEQU_ID_ONOFF VARCHAR(100)
  29.  
  30.   DECLARE @vTIEMPO_MICROPARADA INT
  31.   DECLARE @vES_LABORABLE VARCHAR(2)
  32.   DECLARE @vBUF_FECHA_SYS_MII datetime
  33.   DECLARE @vBUF_VALOR VARCHAR(100)
  34.   DECLARE @vFECHA_CORTE VARCHAR(100)
  35.   DECLARE @vFECHA_CORTE_DATE DATETIME
  36.   DECLARE @vTURNO_ACTUAL INT
  37.   DECLARE @vMINUTOS_EVENTO INT
  38.   DECLARE @vMINUTOS_EVENTO_ACTUAL INT
  39.   DECLARE @vCANTIDAD_REGISTROS_PERIODO INT
  40.  
  41.   DECLARE @vULTIMA_FECHA_JOB VARCHAR(100)
  42.  
  43.  
  44.   DECLARE @vULT_TDE_ID VARCHAR(100)
  45.   DECLARE @vULT_OPR_FEC_INI_OCURRENCIA datetime
  46.   DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA datetime
  47.   DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA_PLUS_1_SEC datetime
  48.   DECLARE @vULT_TUR_ID INT
  49.   DECLARE @vULT_TDE_ID_TRADUCIDO VARCHAR(100)
  50.   DECLARE @vULT_OPR_ID NUMERIC(18,0)
  51.  
  52.   DECLARE @vJOB_FEC_LECT_INI datetime
  53.   DECLARE @vJOB_FEC_LECT_FIN datetime
  54.  
  55.   DECLARE @vJOB_FEC_LECT_INI_STR VARCHAR(100)
  56.   DECLARE @vJOB_FEC_LECT_FIN_STR VARCHAR(100)
  57.  
  58.   DECLARE @vULT_NOBUFFER_TDE_ID VARCHAR(100)
  59.   DECLARE @vULT_NOBUFFER_OPR_FEC_INI_OCURRENCIA datetime
  60.   DECLARE @vULT_NOBUFFER_OPR_FEC_FIN_OCURRENCIA datetime
  61.   DECLARE @vULT_NOBUFFER_TUR_ID INT
  62.   DECLARE @vULT_NOBUFFER_TDE_ID_TRADUCIDO VARCHAR(100)
  63.   DECLARE @vULT_NOBUFFER_OPR_ID NUMERIC(18,0)
  64.   DECLARE @vULT_NOBUFFER_TURNO_ACTUAL INT
  65.   DECLARE @vULT_NOBUFFER_MINUTOS_EVENTO INT
  66.  
  67.   DECLARE @vTURNO_ACTUAL_FECHA_INICIO datetime
  68.  
  69.   DECLARE @vCORRELATIVO_LOTE NUMERIC(30,0)
  70.  
  71.  
  72.   -----------------------------------------------------------
  73.   -->       CURSOR  ULTIMA EJECUCION JOB
  74.   ------------------------------------------------------------
  75.     DECLARE @cursorULTIMA_EJECUCION_JOB cursor  
  76.  
  77.     SET @cursorULTIMA_EJECUCION_JOB = CURSOR FOR
  78.         SELECT JOB_FEC_LECT_INI,
  79.                JOB_FEC_LECT_FIN
  80.           FROM MII_000_JOB_EXECUTION
  81.         WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS'
  82.  
  83.     OPEN @cursorULTIMA_EJECUCION_JOB
  84.     FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN
  85.  
  86.     WHILE (@@FETCH_STATUS = 0)
  87.     BEGIN  
  88.         --> Avanza a proximo registro del cursor
  89.         FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN
  90.     END
  91.     CLOSE @cursorULTIMA_EJECUCION_JOB
  92.     DEALLOCATE @cursorULTIMA_EJECUCION_JOB 
  93.     --> Cierra y Libera Los cursores
  94.    
  95.     --> Convierte y asigna fechas en formato varchar
  96.     SET @vJOB_FEC_LECT_INI_STR = TO_CHAR(@vJOB_FEC_LECT_INI, 'DD/MM/YYYY HH24:MI:SS')
  97.     SET @vJOB_FEC_LECT_FIN_STR = TO_CHAR(@vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS')
  98.  
  99.  
  100.  
  101.     PRINT N'Fecha Proceso: ' + @vJOB_FEC_LECT_INI_STR + ' ' + @vJOB_FEC_LECT_FIN_STR
  102.  
  103.  ------------------------------------------------------------
  104.  --     CURSOR   LINEAS
  105.  ------------------------------------------------------------
  106.   DECLARE @cursorPLN_LIN cursor
  107.  
  108.   SET @cursorPLN_LIN = CURSOR FOR
  109.         SELECT p.PLN_ID,
  110.                l.LIN_ID,
  111.                e.EQU_ID,
  112.                e.EQU_TEORICO,
  113.                e.EQU_NOTIF_AUTOM,
  114.                v.TAG_ID
  115.           FROM MII_PLANTA p,
  116.                MII_LINEA l,
  117.                MII_VARIABLE_PLC v,
  118.                MII_EQUIPO e
  119.          WHERE p.PLN_ID = l.PLN_ID
  120.            AND p.PLN_ID = v.PLN_ID
  121.            AND l.LIN_ID = v.LIN_ID
  122.            AND v.EQU_ID = e.EQU_ID
  123.            AND v.PLN_ID = p.PLN_ID
  124.            AND v.LIN_ID = l.LIN_ID
  125.            AND p.PLN_VIGENTE = 1
  126.            AND l.LIN_VIGENTE = 1
  127.            AND v.TVA_ID = 'CAN'
  128.            AND EQU_NOTIF = 1
  129.  
  130.   ------------------------------------------------------------
  131.   --        BEGIN
  132.   ------------------------------------------------------------
  133.   SET @ERR_LINE = 10
  134.   SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Abre cursor Planta - Linea'
  135.   PRINT @ERR_DESC
  136.  
  137.   ---------------------------------------------------------------------------------------------
  138.   --  Transforma Fecha sys en Formato Fecha '01/07/2013 16:00:02' --> '07/01/2013 16:00:02'
  139.   ---------------------------------------------------------------------------------------------
  140.   SET @vFECHA_CORTE = TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS')
  141.   SET @vFECHA_CORTE_DATE = TO_DATE(@vFECHA_CORTE, 'DD/MM/YYYY HH24:MI:SS')
  142.  
  143.  
  144.   BEGIN TRY
  145.   OPEN @cursorPLN_LIN
  146.  
  147.     --> Avanza a proximo registro del cursor
  148.     FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID
  149.  
  150.     WHILE (@@FETCH_STATUS = 0)
  151.     BEGIN  
  152.  
  153.         SET @ERR_LINE = 20
  154.         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)
  155.         PRINT @ERR_DESC
  156.  
  157.         --> OBTIENE LA CANTIDAD DE REGISTROS
  158.         SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*)
  159.           FROM MII_BUFFER_PLC b
  160.          WHERE b.TAG_ID = @vTAG_ID
  161.            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')
  162.  
  163.         IF @vCANTIDAD_REGISTROS_PERIODO <= 0
  164.             BEGIN
  165.                 SET @ERR_LINE = 1000
  166.                 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO)
  167.                 PRINT @ERR_DESC
  168.             END
  169.         ELSE
  170.             BEGIN
  171.                 SET @ERR_LINE = 2000
  172.                 SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO)
  173.                 PRINT @ERR_DESC
  174.  
  175.                 --> Reserva Proximo Correlativo de Proceso / Lote
  176.                 SELECT @vCORRELATIVO_LOTE = dbo.fnObtieneCorrelativo('LOTE_CONTEO_BUENOS_BUFFER')
  177.                 UPDATE MII_000_CORRELATIVO_MANUAL
  178.                    SET CORRELATIVO_ID = @vCORRELATIVO_LOTE
  179.                  WHERE CORRELATIVO_NAME = 'LOTE_CONTEO_BUENOS_BUFFER'
  180.                 -- Reserva Proximo Correlativo de Proceso / Lote <--
  181.  
  182.  
  183.                 --> Asigna Numero de Lote a registros de Buffer
  184.                 UPDATE MII_BUFFER_PLC
  185.                    SET BUF_LOTE_ID = @vCORRELATIVO_LOTE
  186.                  WHERE TAG_ID = @vTAG_ID
  187.                    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')
  188.  
  189.  
  190.                 SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*)
  191.                   FROM MII_BUFFER_PLC
  192.                  WHERE BUF_LOTE_ID = @vCORRELATIVO_LOTE
  193.                    AND TAG_ID = @vTAG_ID
  194.  
  195.  
  196.                 --> Obtiene Orden Activa del Equipo
  197.                 SELECT @vCOM_AUFNR = NVL(COM_AUFNR,NULL)
  198.                   FROM MII_PROD_ORDEN_ACTIVA
  199.                 WHERE EQU_ID = @vEQU_ID
  200.  
  201.  
  202.                 --> Persiste la cantidad de Registros
  203.                 EXECUTE dbo.spMII_PUT_ProductosBuenos @vPLN_ID, @vLIN_ID, @vEQU_ID, @vCANTIDAD_REGISTROS_PERIODO, @vCOM_AUFNR, @vCANTIDAD_REGISTROS_PERIODO
  204.  
  205.             END
  206.  
  207.  
  208.         PRINT N'------------------------ CORTE PLN_LIN_EQU_TAG ---------------------------------------'
  209.         --> Avanza a proximo registro del cursor
  210.         FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID
  211.     END
  212.  
  213.  
  214.     --------------------------------------------------------------------
  215.     --  FIN Recorre Planta Linea (a)
  216.     --------------------------------------------------------------------
  217.  
  218.  
  219.  
  220.     SET @ERR_LINE = 90000
  221.     SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Actualizacion Fechas Ejecucion JOB REGISTRA_TIEMPO_OPERACION '
  222.     PRINT @ERR_DESC
  223.  
  224.  
  225.      UPDATE MII_000_JOB_EXECUTION
  226.         SET JOB_FEC_UPD = sysdate,
  227.             JOB_FEC_LECT_INI = @vJOB_FEC_LECT_FIN,
  228.             JOB_FEC_LECT_FIN = @vFECHA_CORTE_DATE
  229.       WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS'
  230.  
  231.  
  232.     SET @ERR_LINE = 1000000
  233.     SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Proceso Finalizado con Exito'
  234.     PRINT @ERR_DESC
  235.  
  236.     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
  237.   END TRY
  238.   BEGIN CATCH
  239.     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
  240.   END CATCH;
  241.   ------------------------------------------------------------
  242.   --        END
  243.   ------------------------------------------------------------
  244.  
  245. --> Cierra y Libera Los cursores
  246. CLOSE @cursorPLN_LIN
  247. DEALLOCATE @cursorPLN_LIN

Última edición por gnzsoloyo; 23/06/2015 a las 08:01