Merge lento

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;

  

  

 

 

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.

 

En respuesta a 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 insert ,tbm demora demasiado mas de una hora ,cual seria el problema no tengo idea 

agradeso la ayuda

 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.

En respuesta a 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?

 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