carlos consulta, estoy ejecutando un merge ,pero tarda demasiado noce a que se debe, el merge llena los datos de un select ,ese select me muestra rapido la info , pero para insertar a la tabla destino se demora una eternidad . ayuda gracias pongo el merge :
create or replace
PROCEDURE SP_MERGE_FACT_ALUMNOPRUE AUTHID CURRENT_USER
IS
BEGIN
------------------------------
--OSILDM.FACT_ALUMNOPERIODO--
------------------------------
MERGE /*+ APPEND */ INTO MRIVERA.FACT_ALUMNOPERIODOPRUE I
USING(SELECT
L3.ID_INSTITUCION,
L3.ID_GRUPOPROGRAMA,
L2.ID_GRUPOPRODUCTO,
L1.ID_PRODUCTO,
L5.ID_SEDE,
CASE
WHEN T4.GFORMAINGRESO=8
THEN
(
SELECT
Z1.ID_MODALIDADINGRESO
FROM
OSILDM.LK_MODALIDADINGRESO Z1
WHERE
Z1.COD_TABLA =5
AND Z1.COD_MODALIDADINGRESO=T4.GTIPOINGRESO
)
ELSE L8.ID_MODALIDADINGRESO
END AS FORMAINGRESO,
L7.ID_ESTADO,
CASE
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 45
THEN 1
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 46 AND 85
THEN 2
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 86 AND 125
THEN 3
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 126 AND 165
THEN 4
WHEN T1.CPROGRAMA =1
AND T1.NCREDITO_ACUM >165
THEN 5
--PROGRAMA CEPEL
WHEN L3.COD_GRUPOPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 65
THEN 1
WHEN L3.COD_GRUPOPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 66 AND 130
THEN 2
WHEN L3.COD_GRUPOPROGRAMA=1
AND T1.NCREDITO_ACUM >131
THEN 3
--CHEFF
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 65
THEN 1
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND T1.NCREDITO_ACUM BETWEEN 66 AND 130
THEN 2
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND T1.NCREDITO_ACUM >131
THEN 3
END AS ANIOCURSO,
CASE --CALCULA EL CICLO
--PROGRAMA REGULAR
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 20
THEN 1
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 21 AND 40
THEN 2
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 41 AND 60
THEN 3
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 61 AND 80
THEN 4
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 81 AND 100
THEN 5
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 101 AND 120
THEN 6
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 121 AND 140
THEN 7
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 141 AND 160
THEN 8
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 161 AND 180
THEN 9
ELSE 10
END AS CICLO,
NVL(L6.ID_CARRERADG,0) AS ID_CARRERADG,
L4.ID_PERIODO,
L9.ID_ALUMNO,
T1.NPONDERADO,
T1.NACUMULADO,
CASE
--CALCULO SI EL ALUMNO SE MATRICULO EN EL PERIODO ANTERIOR
---PROGRAMA REGULAR
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=1
THEN 0
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=2
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO =T12.CPERIODO_NEW
AND NVL(T13.GPERIODO,0)=NVL(T12.GTIPO_PERIODO,0)
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND T13.ANIOINICIO =(L4.ANIOINICIO -1)
AND T13.ID_TIPOPERIODO=L4.ID_TIPOPERIODO+1
)
,0)
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=3
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=1
AND L4.ID_TIPOPERIODO =2
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO-1,
L4.ID_TIPOPERIODO +2)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=1
AND L4.ID_TIPOPERIODO =3
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=1
AND L4.ID_TIPOPERIODO =4
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND L4.ID_TIPOPERIODO =2
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T12.GTIPO_PERIODO =1
AND T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO-1,
L4.ID_TIPOPERIODO +2)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND L4.ID_TIPOPERIODO =3
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T12.GTIPO_PERIODO =1
AND T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
WHEN L3.COD_GRUPOPROGRAMA=6
AND L2.COD_ITEM =1
AND L4.ID_TIPOPERIODO =4
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA_DG,0)
WHERE
T12.GTIPO_PERIODO =1
AND T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
END AS FLAGMATPERANT,
L4.ID_TIPOPERIODO,
T1.NCREDITO_ACUM,
CASE
WHEN T1.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA,
T1.NCREDITO,
TO_CHAR(SYSDATE,'DD/MM/YYYY') AS FECHA_PROCESO,
CASE
WHEN T4.GFORMAINGRESO=8
THEN
(
SELECT
Z1.ID_MODALIDADINGRESO
FROM
OSILDM.LK_MODALIDADINGRESO Z1
WHERE
Z1.COD_TABLA =5
AND Z1.COD_MODALIDADINGRESO=T4.GTIPOINGRESO
)
ELSE L8.ID_MODALIDADINGRESO
END AS DINAMICAINGRESO,
L7.ID_ESTADO AS DINAMICASALIDA
FROM
OSILBI.ALUMNO_PERIODO T1
JOIN OSILBI.DIMENSIONES_BI T2
ON
T2.CCARRERA =T1.CCARRERA
AND NVL(T2.CARRERA_DG,0)=NVL(T1.CCARRERA_DG,0)
AND CGPROGRAMA <>4 --348819
JOIN OSILDM.LK_PRODUCTO L1
ON
L1.COD_ITEM=T2.CPRODUCTO
JOIN OSILDM.LK_GRUPOPRODUCTO L2
ON
L2.COD_ITEM=T2.GPRODUCTO
JOIN OSILDM.LK_GRUPOPROGRAMA L3
ON
L3.COD_GRUPOPROGRAMA=T2.CGPROGRAMA
JOIN OSILBI.PERIODO T3
ON
T3.CPERIODO=T1.CPERIODO
AND GVISIBLE =1 --347743
JOIN OSILDM.LK_PERIODO L4
ON
L4.DESC_PERIODO =T3.CPERIODO_NEW
AND NVL(L4.GPERIODO,0)=NVL(T3.GTIPO_PERIODO,0)
LEFT JOIN OSILDM.LK_SEDE L5
ON
L5.COD_SEDE=T2.CSEDE
LEFT JOIN OSILDM.LK_CARRERADG L6
ON
L6.COD_CARRERADG=NVL(T1.CCARRERA_DG,0)
LEFT JOIN OSILDM.LK_ESTADOALUMNO L7
ON
L7.COD_ESTADO =T1.GESTADO
AND L7.COD_TABLA=8
JOIN OSILBI.ALUMNO T4
ON
T4.CPROGRAMA =T1.CPROGRAMA
AND T4.CPERSONA=T1.CPERSONA
AND T4.CINGRESO=T1.CINGRESO
AND T4.CALUMNO =T1.CALUMNO --347502
LEFT JOIN OSILDM.LK_MODALIDADINGRESO L8
ON
L8.COD_MODALIDADINGRESO=T4.GFORMAINGRESO
AND L8.COD_TABLA =18
JOIN OSILDM.LK_INSTITUCION L10
ON
L10.COD_INSTITUCION=T1.CINSTITUCION
JOIN OSILDM.LK_ALUMNO L9
ON
L9.COD_PERSONA =T4.CPERSONA
AND L9.COD_ALUMNO =T4.CALUMNO
AND L9.COD_INGRESO =T4.CINGRESO
AND L9.COD_PROGRAMA=T1.CPROGRAMA
UNION ALL
SELECT
L3.ID_INSTITUCION,
L3.ID_GRUPOPROGRAMA,
L2.ID_GRUPOPRODUCTO,
L1.ID_PRODUCTO,
L5.ID_SEDE,
CASE
WHEN T4.GFORMAINGRESO=8
THEN
(
SELECT
Z1.ID_MODALIDADINGRESO
FROM
OSILDM.LK_MODALIDADINGRESO Z1
WHERE
Z1.COD_TABLA =5
AND Z1.COD_MODALIDADINGRESO=T4.GTIPOINGRESO
)
ELSE L8.ID_MODALIDADINGRESO
END AS FORMAINGRESO,
L7.ID_ESTADO,
CASE
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 45
THEN 1
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 46 AND 85
THEN 2
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 86 AND 125
THEN 3
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 126 AND 165
THEN 4
WHEN T1.CPROGRAMA =1
AND T1.NCREDITO_ACUM >165
THEN 5
END AS ANIOCURSO,
CASE --CALCULA EL CICLO
--PROGRAMA REGULAR
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 0 AND 20
THEN 1
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 21 AND 40
THEN 2
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 41 AND 60
THEN 3
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 61 AND 80
THEN 4
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 81 AND 100
THEN 5
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 101 AND 120
THEN 6
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 121 AND 140
THEN 7
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 141 AND 160
THEN 8
WHEN T1.CPROGRAMA=1
AND T1.NCREDITO_ACUM BETWEEN 161 AND 180
THEN 9
ELSE 10
END AS CICLO,
-- NVL(L6.ID_CARRERADG,0),
L11.ID_PRODUCTO,
L4.ID_PERIODO,
L9.ID_ALUMNO,
T1.NPONDERADO,
T1.NACUMULADO,
CASE
--CALCULO SI EL ALUMNO SE MATRICULO EN EL PERIODO ANTERIOR
---PROGRAMA REGULAR
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=1
THEN 0
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=2
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA_DG
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CCARRERA =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO-1,
L4.ID_TIPOPERIODO +1)
)
,0)
WHEN T1.CPROGRAMA =1
AND L4.ID_TIPOPERIODO=3
THEN NVL(
(
SELECT
CASE
WHEN T11.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA
FROM
OSILBI.ALUMNO_PERIODO T11
JOIN OSILBI.PERIODO T12
ON
T12.CPERIODO =T11.CPERIODO
AND T12.GVISIBLE=1
JOIN OSILDM.LK_PERIODO T13
ON
T13.DESC_PERIODO=T12.CPERIODO_NEW
JOIN OSILBI.DIMENSIONES_BI T14
ON
T14.CCARRERA =T11.CCARRERA_DG
AND NVL(T14.CARRERA_DG,0)=NVL(T11.CCARRERA,0)
WHERE
T11.CPERSONA =T1.CPERSONA
AND T14.CGPROGRAMA =L3.COD_GRUPOPROGRAMA
AND T14.CPRODUCTO =L1.COD_ITEM
AND T11.CINGRESO =T1.CINGRESO
AND CONCAT(T13.ANIOINICIO,T13.ID_TIPOPERIODO)=CONCAT(L4.ANIOINICIO,
L4.ID_TIPOPERIODO-1)
)
,0)
END AS FLAGMATPERANT,
L4.ID_TIPOPERIODO,
T1.NCREDITO_ACUM,
CASE
WHEN T1.GCONDICION=1
THEN 1
ELSE 0
END AS MATRICULA,
T1.NCREDITO,
TO_CHAR(SYSDATE,'DD/MM/YYYY') AS FECHA_PROCESO,
CASE
WHEN T4.GFORMAINGRESO=8
THEN
(
SELECT
Z1.ID_MODALIDADINGRESO
FROM
OSILDM.LK_MODALIDADINGRESO Z1
WHERE
Z1.COD_TABLA =5
AND Z1.COD_MODALIDADINGRESO=T4.GTIPOINGRESO
)
ELSE L8.ID_MODALIDADINGRESO
END AS DINAMICAINGRESO,
L7.ID_ESTADO AS DINAMICASALIDA
FROM
OSILBI.ALUMNO_PERIODO T1
JOIN OSILBI.DIMENSIONES_BI T2
ON
T2.CCARRERA =T1.CCARRERA_DG
AND NVL(T2.CARRERA_DG,0)=NVL(T1.CCARRERA,0)
AND T2.CGPROGRAMA =4
JOIN OSILDM.LK_PRODUCTO L1
ON
L1.COD_ITEM=T2.CPRODUCTO
JOIN OSILDM.LK_GRUPOPRODUCTO L2
ON
L2.COD_ITEM=T2.GPRODUCTO
JOIN OSILDM.LK_GRUPOPROGRAMA L3
ON
L3.COD_GRUPOPROGRAMA=T2.CGPROGRAMA
JOIN OSILBI.PERIODO T3
ON
T3.CPERIODO=T1.CPERIODO
AND GVISIBLE =1
JOIN OSILDM.LK_PERIODO L4
ON
L4.DESC_PERIODO =T3.CPERIODO_NEW
AND NVL(L4.GPERIODO,0)=NVL(T3.GTIPO_PERIODO,0)
LEFT JOIN OSILDM.LK_SEDE L5
ON
L5.COD_SEDE=T2.CSEDE
JOIN OSILBI.DIMENSIONES_BI T9
ON
T9.CCARRERA =T1.CCARRERA
AND NVL(T9.CARRERA_DG,0)=NVL(T1.CCARRERA_DG,0)
AND T9.CGPROGRAMA =3
JOIN OSILDM.LK_PRODUCTO L11
ON
L11.COD_ITEM=T9.CPRODUCTO
LEFT JOIN OSILDM.LK_ESTADOALUMNO L7
ON
L7.COD_ESTADO =T1.GESTADO
AND L7.COD_TABLA=8 --348 588
JOIN OSILBI.ALUMNO T4
ON
T4.CPROGRAMA =T1.CPROGRAMA
AND T4.CPERSONA=T1.CPERSONA
AND T4.CINGRESO=T1.CINGRESO
AND T4.CALUMNO =T1.CALUMNO --348482
LEFT JOIN OSILDM.LK_MODALIDADINGRESO L8
ON
L8.COD_MODALIDADINGRESO=T4.GFORMAINGRESO
AND L8.COD_TABLA =18
JOIN OSILDM.LK_INSTITUCION L10
ON
L10.COD_INSTITUCION=T1.CINSTITUCION
JOIN OSILDM.LK_ALUMNO L9
ON
L9.COD_PERSONA =T1.CPERSONA
AND L9.COD_ALUMNO =T1.CALUMNO
AND L9.COD_INGRESO =T1.CINGRESO
AND L9.COD_PROGRAMA=T1.CPROGRAMA) L
ON(I.ID_INSTITUCION = L.ID_INSTITUCION
AND I.ID_GRUPOPROGRAMA = L.ID_GRUPOPROGRAMA
AND I.ID_GRUPOPRODUCTO = L.ID_GRUPOPRODUCTO
AND I.ID_PRODUCTO = L.ID_PRODUCTO
AND I.ID_SEDE = L.ID_SEDE
AND I.ID_MODALIDADINGRESO = L.FORMAINGRESO
AND I.ID_ANIOCURSO = L.ANIOCURSO
AND I.CICLO = L.CICLO
AND I.ID_CARRERADG = L.ID_CARRERADG
AND I.ID_PERIODO = L.ID_PERIODO
AND I.ID_ALUMNO = L.ID_ALUMNO
AND I.ID_TIPOPERIODO = L.ID_TIPOPERIODO)
/*
WHEN MATCHED THEN
UPDATE
SET I.ID_ESTADO = L.ID_ESTADO
,I.PROMEDIOPERIODO = L.NPONDERADO
,I.PROMEDIOACUMULADO = L.NACUMULADO
,I.FLAGMATPERANT = L.FLAGMATPERANT
,I.CREDITOACUMULADO = L.NCREDITO_ACUM
,I.FLAGMATRICULA = L.MATRICULA
,I.CREDITOPERIODO = L.NCREDITO
*/
WHEN NOT MATCHED THEN
INSERT(I.ID_INSTITUCION ,I.ID_GRUPOPROGRAMA ,I.ID_GRUPOPRODUCTO ,I.ID_PRODUCTO ,I.ID_SEDE ,I.ID_MODALIDADINGRESO ,I.ID_ESTADO ,I.ID_ANIOCURSO ,I.CICLO ,I.ID_CARRERADG ,I.ID_PERIODO ,I.ID_ALUMNO ,I.PROMEDIOPERIODO ,I.PROMEDIOACUMULADO ,I.FLAGMATPERANT ,I.ID_TIPOPERIODO ,I.CREDITOACUMULADO ,I.FLAGMATRICULA ,I.CREDITOPERIODO ,I.FECHAPROCESO ,I.DINAMICA_ENTRADA ,I.DINAMICA_SALIDA)
VALUES(L.ID_INSTITUCION ,L.ID_GRUPOPROGRAMA ,L.ID_GRUPOPRODUCTO ,L.ID_PRODUCTO ,L.ID_SEDE ,L.FORMAINGRESO ,L.ID_ESTADO ,L.ANIOCURSO ,L.CICLO ,L.ID_CARRERADG ,L.ID_PERIODO ,L.ID_ALUMNO ,L.NPONDERADO ,L.NACUMULADO ,L.FLAGMATPERANT ,L.ID_TIPOPERIODO ,L.NCREDITO_ACUM ,L.MATRICULA ,L.NCREDITO ,L.FECHA_PROCESO ,L.DINAMICAINGRESO ,L.DINAMICASALIDA);
COMMIT;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_SEDE = 0 WHERE ID_SEDE IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_MODALIDADINGRESO = 0 WHERE ID_MODALIDADINGRESO IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_ESTADO = 0 WHERE ID_ESTADO IS NULL ;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_ANIOCURSO = 0 WHERE ID_ANIOCURSO IS NULL ;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_TIPOEGRESADO = 0 WHERE ID_TIPOEGRESADO IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET TIPOALUMNO = 0 WHERE TIPOALUMNO IS NULL ;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET FLAGMATPERANT = 0 WHERE FLAGMATPERANT IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET ID_TIPOPERIODO = 0 WHERE ID_TIPOPERIODO IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET FLAGCAMBIOCARRERA = 0 WHERE FLAGCAMBIOCARRERA IS NULL;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET DINAMICA_ENTRADA = 0 WHERE DINAMICA_ENTRADA IS NULL ;
UPDATE MRIVERA.FACT_ALUMNOPERIODOPRUE SET DINAMICA_SALIDA = 0 WHERE DINAMICA_SALIDA IS NULL;
COMMIT;
DELETE FROM MRIVERA.FACT_ALUMNOPERIODOPRUE
WHERE ID_ALUMNO = 36944 AND ID_GRUPOPROGRAMA = 3 AND ID_PRODUCTO = 135 AND ID_ESTADO = 7 AND ID_PERIODO = 292;
COMMIT;
END;
- Inicie sesión o registrese para enviar comentarios
El update esta comentado
Subido por dmartinez el 13 Marzo, 2014 - 18:05
El update esta comentado porque la tabla destino está vacía. Agradezco su ayuda
Pues si la tabla destino está
Subido por Carlos el 13 Marzo, 2014 - 19:43
Pues si la tabla destino está vacía yo antes de nada probaría a hacer el insert directo en lugar del merge, a ver si también te tarda tanto.
El Hint /*+ APPEND */ lo pones por alguna razón? Si no es necesario yo lo quitaría..
Otra prueba rápida que puedes hacer es utilizar un update combinado con una join para hacer lo mismo.
Si sigue siendo demasiado lento, utiliza un explain plan para analizar el coste de la consulta, y seguramente te dará pistas sobre lo que está haciendo tan lenta la inserción.
ya ahora cuando hago un
Subido por Anonimo (no verificado) el 14 Marzo, 2014 - 18:11
En respuesta a Pues si la tabla destino está por Carlos
ya ahora cuando hago un insert ,me bota el error ora- la subconsulta de una sola fila devuelve más de una fila oracle
Entonces puede que el
Subido por Carlos el 14 Marzo, 2014 - 21:58
En respuesta a ya ahora cuando hago un por Anonimo (no verificado)
Entonces puede que el problema te venga por ahí, la select ha de devolver un sólo registro para cada registro que ha de actualizar, la relación ha de ser de uno a uno.
Y cuando tengas registros únicos, recuerda utilizar el HINT /*+BYPASS_UJVC*/, tal como se explica en el post.
lo estoy probando con un
Subido por dmartinez el 18 Marzo, 2014 - 17:20
lo estoy probando con un insert ,tbm demora demasiado mas de una hora ,cual seria el problema no tengo idea
agradeso la ayuda
ahora, consultando por
Subido por dmartinez el 18 Marzo, 2014 - 18:26
ahora, consultando por google , dicen q mejor usar tablas temporales, no entiedndo mucho me pueden explicar el uso correcto de estaas tablas , y como usarla en el insert q planteee.
Si crees que sigue tardando
Subido por Carlos el 18 Marzo, 2014 - 21:06
En respuesta a ahora, consultando por por dmartinez
Si crees que sigue tardando demasiado tendrás que hilar más fino creando un explain plan y analizando los resultados para ver en qué punto/s tienes el mayor coste.
Sobre lo que comentas de crear tablas temporales, tendrías que detallarlo un poco más, las tablas temporales pueden ayudar a la base de datos en determinadas situaciones, pero analizar el coste de la consulta creo que te puede ayudar más.
Lo has encontrado cómo una propuesta general para optimizar un Merge?
Carlos, buenas tardes
Subido por dmartinez el 20 Marzo, 2014 - 22:13
Carlos, buenas tardes consulta ejecute el explain plan for del select
y me mostro este resultado noc como interpretarlo
www.ayudaoracle.eshost.es (minuscula)
agradeasco la ayuda
te mado otra para q puedas
Subido por dmartinez el 20 Marzo, 2014 - 22:16
te mado otra para q puedas descargar el archivo en csv
donde esta el explain plan for del (select que demora en insertar ) haber si me ayudas a saber cual es el problema gracias
WWW.AYUDAORACLE.ESHOST.ES/AYUDADMARTINEZ2.CSV -----> RUTA PARA DESCARGAR EL ARCHIVO