- https://universidadnacional.atlassian.net/jira/software/c/projects/BTPPI/boards/161?selectedIssue=BTPPI-342
- Para resolver esta consulta se van a crear una serie de funciones para facilitar la obtención y presentación de datos
- PODEMOS DESCARGAR EL SCRIPT AQUÍ
- Y PODEMOS DESCARGAR EL RESTO DE RECURSOS: AQUÍ
PARTE1: FUNCIONES DE BD
FUNCION: PPE_OBTENER_METAS_OPE_FUNCIONALES
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_METAS_OPE_FUNCIONALES
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_PERIODO_ANUAL_META_POA_TABLE_TYPE;
DROP TYPE PPI.PPE_PERIODO_ANUAL_META_POA_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato META_POA
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_PERIODO_ANUAL_META_POA_TYPE AS OBJECT (
PERIODO_ANUAL NUMBER,
META_POA NUMBER
);
GRANT EXECUTE ON PPI.PPE_PERIODO_ANUAL_META_POA_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato MetaPoaType
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_PERIODO_ANUAL_META_POA_TABLE_TYPE AS TABLE OF PPE_PERIODO_ANUAL_META_POA_TYPE;
GRANT EXECUTE ON PPI.PPE_PERIODO_ANUAL_META_POA_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES
RETURN PPE_PERIODO_ANUAL_META_POA_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
DISTINCT
PO.PERIODO_ANUAL,
MPE.META_POA
FROM META_POA_EVALUACION MPE
INNER JOIN META_POA MP ON (MP.ID_META_POA = MPE.META_POA)
INNER JOIN OBJETIVO_POA OP ON (OP.ID_OBJETIVO_POA = MP.OBJETIVO_POA)
INNER JOIN PLAN_OPERATIVO PO ON (PO.ID_PLAN_OPERATIVO = OP.PLAN_OPERATIVO)
INNER JOIN UNIDAD_EJECUTORA UE_PO ON (UE_PO.ID_UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA)
INNER JOIN EVALUACION_OPERATIVA EO ON (EO.PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO)
WHERE
PO.ESTADO_FORMULACION_OPE IN (SELECT VALOR FROM PARAMETRO WHERE LLAVE IN ('param_ppi_ppo_estadoFormulacionOpe_aprobado_unSoloNivel', 'param_ppi_ppo_estadoFormulacionOpe_aprobado_unidad_integradora'))
AND PO.TIPO_PLAN_OPERATIVO = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoPlanOperativo_unidad')
AND EO.ESTADO_EVALUACION_POA IN (SELECT VALOR FROM PARAMETRO WHERE LLAVE IN ('param_ppi_ppo_estadoEvaluacionPOA_aprobado_unSoloNivel', 'param_ppi_ppo_estadoEvaluacionPOA_aprobado_unidad_integradora'))
AND MPE.ETAPA_PLAN = EO.ETAPA_PLAN
AND EO.FECHA_APROBACION = (
SELECT
MAX(EO.FECHA_APROBACION)
FROM
EVALUACION_OPERATIVA EO1
INNER JOIN PLAN_OPERATIVO PO1 ON (PO1.ID_PLAN_OPERATIVO = EO1.PLAN_OPERATIVO)
WHERE
PO1.ID_PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO
AND PO1.UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA
)
ORDER BY MPE.META_POA
) LOOP
PIPE ROW (PPE_PERIODO_ANUAL_META_POA_TYPE(REC.PERIODO_ANUAL,REC.META_POA));
END LOOP;
RETURN;
END PPE_OBTENER_METAS_OPE_FUNCIONALES;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS MetaPoa
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES());
FUNCIÓN: PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_PERIODO_ANUAL_TABLE_TYPE;
DROP TYPE PPI.PPE_PERIODO_ANUAL_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_PERIODO_ANUAL_TYPE AS OBJECT (
PERIODO_ANUAL NUMBER
);
GRANT EXECUTE ON PPI.PPE_PERIODO_ANUAL_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PERIODO_ANUAL_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_PERIODO_ANUAL_TABLE_TYPE AS TABLE OF PPE_PERIODO_ANUAL_TYPE;
GRANT EXECUTE ON PPI.PPE_PERIODO_ANUAL_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION
RETURN PPE_PERIODO_ANUAL_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
SELECT
DISTINCT
APD.PERIODO_ANUAL PERIODO_ANUAL
FROM
META_POA_APORTE MPAP
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES())) METAS_FUNCIONALES ON MPAP.META_POA = METAS_FUNCIONALES.META_POA
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO)
INNER JOIN APORTE_PAE_DISTRIBUCION APD ON (APD.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO)
ORDER BY APD.PERIODO_ANUAL
) LOOP
PIPE ROW (PPE_PERIODO_ANUAL_TYPE(REC.PERIODO_ANUAL));
END LOOP;
RETURN;
END PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
GRANT EXECUTE ON PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION());
FUNCION: PPE_OBTENER_APD_X_APORTE
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_APD_X_APORTE
--*******************************************************************************
--*******************************************************************************
--*****************************************************
--COMPONENTE REQUERIDO: AÑO
--*****************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_ANO_TABLE_TYPE;
DROP TYPE PPI.PPE_ANO_TYPE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ANO_TYPE AS OBJECT (
ANO NUMBER(4)
);
GRANT EXECUTE ON PPI.PPE_ANO_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato ANO_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ANO_TABLE_TYPE AS TABLE OF PPE_ANO_TYPE;
GRANT EXECUTE ON PPI.PPE_ANO_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--*****************************************************
--FUNCIÓN: PPE_OBTENER_APD_X_APORTE
--*****************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_APD_TABLE_TYPE;
DROP TYPE PPI.PPE_APD_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_APD_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_APD_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
DISTRIBUCION_1 NUMBER,
DISTRIBUCION_2 NUMBER,
DISTRIBUCION_3 NUMBER,
DISTRIBUCION_4 NUMBER,
DISTRIBUCION_5 NUMBER
);
GRANT EXECUTE ON PPI.PPE_APD_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_APD_TABLE_TYPE AS TABLE OF PPE_APD_TYPE;
GRANT EXECUTE ON PPI.PPE_APD_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_APD_X_APORTE
--RETURN: tabla virtual de tipo APD_TABLE_TYPE
RETURN PPE_APD_TABLE_TYPE PIPELINED AS
--***************************************************************
--VARIABLES
--***************************************************************
-- Almacena los años en un arreglo
v_periodos PPE_PERIODO_ANUAL_TABLE_TYPE := PPE_PERIODO_ANUAL_TABLE_TYPE();
-- Variable para almacenar el año actual
v_periodo PPE_PERIODO_ANUAL_TYPE;
-- Almacena los años en un arreglo
v_anos PPE_ANO_TABLE_TYPE := PPE_ANO_TABLE_TYPE();
-- Variable para almacenar el año actual
v_ano PPE_ANO_TYPE;
-- Variable para construir la consulta PIVOT
v_sql CLOB;
-- Variable para almacenar el resultado de la consulta PIVOT
v_result SYS_REFCURSOR;
-- Variables para almacenar los valores dinámicos de las columnas del PIVOT
v_aporte NUMBER;
v_distribucion_1 NUMBER;
v_distribucion_2 NUMBER;
v_distribucion_3 NUMBER;
v_distribucion_4 NUMBER;
v_distribucion_5 NUMBER;
BEGIN
--***************************************************************
--OBTENCIÓN DE DATOS
--***************************************************************
-- Ejecutar consulta del ID_PERIODO_ANUAL y ANO para almacenarlos en arreglos para crear el PIVOT
FOR REC IN (SELECT ANO, ID_PERIODO_ANUAL
FROM PERIODO_ANUAL
WHERE ID_PERIODO_ANUAL IN (SELECT PERIODO_ANUAL
FROM TABLE(PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION()))
ORDER BY ANO)
LOOP
-- Utilizar el constructor del tipo ANO_TYPE
v_ano := PPE_ANO_TYPE(REC.ANO);
-- Utilizar el constructor del tipo ANO_TYPE
v_periodo := PPE_PERIODO_ANUAL_TYPE(REC.ID_PERIODO_ANUAL);
-- Añadir los resultados al arreglo de años
v_periodos.EXTEND;
v_periodos(v_periodos.LAST) := v_periodo;
-- Añadir los resultados al arreglo de años
v_anos.EXTEND;
v_anos(v_anos.LAST) := v_ano;
END LOOP;
--**************************************************************
--CONSULTA DINÁMICA
--**************************************************************
v_sql := 'SELECT ';
v_sql := v_sql || '* ';
v_sql := v_sql || 'FROM ( ';
v_sql := v_sql || 'SELECT ';
v_sql := v_sql || 'DISTINCT ';
v_sql := v_sql || 'APD.APORTE_ESTRATEGICO, ';
v_sql := v_sql || 'APD.PERIODO_ANUAL, ';
v_sql := v_sql || 'APD.DISTRIBUCION_PORCENTUAL ';
v_sql := v_sql || 'FROM META_POA_APORTE MPAP ';
v_sql := v_sql || 'INNER JOIN ( ';
v_sql := v_sql || 'SELECT * FROM TABLE(PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES()) ';
v_sql := v_sql || ') METAS_FUNCIONALES ON MPAP.META_POA = METAS_FUNCIONALES.META_POA ';
v_sql := v_sql || 'INNER JOIN APORTE_ESTRATEGICO APE ON APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO ';
v_sql := v_sql || 'INNER JOIN APORTE_PAE_DISTRIBUCION APD ON APD.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO ';
v_sql := v_sql || 'WHERE APD.PERIODO_ANUAL IN ( ';
v_sql := v_sql || 'SELECT * FROM TABLE(PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION()) ';
v_sql := v_sql || ') ';
v_sql := v_sql || ') ';
v_sql := v_sql || 'PIVOT (MAX(DISTRIBUCION_PORCENTUAL) FOR PERIODO_ANUAL IN (';
FOR i IN 1..v_anos.LAST LOOP
v_sql := v_sql || v_periodos(i).PERIODO_ANUAL || ' as "' || v_anos(i).ANO || '"';
IF i < v_anos.LAST THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')) ORDER BY APORTE_ESTRATEGICO';
-- Ejecutar la consulta PIVOT
OPEN v_result FOR v_sql;
--**************************************************************
--RECUPERAR Y FORMATEAAR LOS DATOS
--**************************************************************
LOOP
FETCH v_result INTO v_aporte,v_distribucion_1, v_distribucion_2, v_distribucion_3, v_distribucion_4, v_distribucion_5;
EXIT WHEN v_result%NOTFOUND;
PIPE ROW(PPE_APD_TYPE(v_aporte,v_distribucion_1, v_distribucion_2, v_distribucion_3, v_distribucion_4, v_distribucion_5));
END LOOP;
CLOSE v_result;
RETURN;
END PPE_OBTENER_APD_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_APD_X_APORTE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_APD_X_APORTE());
FUNCION: PPE_OBTENER_PROMEDIOS_X_APORTE
--*****************************************************
--FUNCIÓN: PPE_OBTENER_PROMEDIOS_X_APORTE
--*****************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_APORTE_PROMEDIOS_TABLE_TYPE;
DROP TYPE PPI.PPE_APORTE_PROMEDIOS_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_PROMEDIOS_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_APORTE_PROMEDIOS_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
PROMEDIO_1 NUMBER,
PROMEDIO_2 NUMBER,
PROMEDIO_3 NUMBER,
PROMEDIO_4 NUMBER,
PROMEDIO_5 NUMBER
);
GRANT EXECUTE ON PPI.PPE_APORTE_PROMEDIOS_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_APORTE_PROMEDIOS_TABLE_TYPE AS TABLE OF PPE_APORTE_PROMEDIOS_TYPE;
GRANT EXECUTE ON PPI.PPE_APORTE_PROMEDIOS_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_PROMEDIOS_X_APORTE
--RETURN: tabla virtual de tipo APD_TABLE_TYPE
RETURN PPE_APORTE_PROMEDIOS_TABLE_TYPE PIPELINED AS
--***************************************************************
--VARIABLES
--***************************************************************
-- Almacena los años en un arreglo
v_periodos PPE_PERIODO_ANUAL_TABLE_TYPE := PPE_PERIODO_ANUAL_TABLE_TYPE();
-- Variable para almacenar el año actual
v_periodo PPE_PERIODO_ANUAL_TYPE;
-- Almacena los años en un arreglo
v_anos PPE_ANO_TABLE_TYPE := PPE_ANO_TABLE_TYPE();
-- Variable para almacenar el año actual
v_ano PPE_ANO_TYPE;
-- Variable para construir la consulta PIVOT
v_sql CLOB;
-- Variable para almacenar el resultado de la consulta PIVOT
v_result SYS_REFCURSOR;
-- Variables para almacenar los valores dinámicos de las columnas del PIVOT
v_aporte NUMBER;
v_promedio_1 NUMBER;
v_promedio_2 NUMBER;
v_promedio_3 NUMBER;
v_promedio_4 NUMBER;
v_promedio_5 NUMBER;
BEGIN
--***************************************************************
--OBTENCIÓN DE DATOS
--***************************************************************
-- Ejecutar consulta del ID_PERIODO_ANUAL y ANO para almacenarlos en arreglos para crear el PIVOT
FOR REC IN (SELECT ANO, ID_PERIODO_ANUAL
FROM PERIODO_ANUAL
WHERE ID_PERIODO_ANUAL IN (SELECT PERIODO_ANUAL
FROM TABLE(PPI.PPE_OBTENER_PERIODOS_ANUALES_DISTRIBUCION()))
ORDER BY ANO)
LOOP
-- Utilizar el constructor del tipo ANO_TYPE
v_ano := PPE_ANO_TYPE(REC.ANO);
-- Utilizar el constructor del tipo ANO_TYPE
v_periodo := PPE_PERIODO_ANUAL_TYPE(REC.ID_PERIODO_ANUAL);
-- Añadir los resultados al arreglo de años
v_periodos.EXTEND;
v_periodos(v_periodos.LAST) := v_periodo;
-- Añadir los resultados al arreglo de años
v_anos.EXTEND;
v_anos(v_anos.LAST) := v_ano;
END LOOP;
--**************************************************************
--CONSULTA DINÁMICA
--**************************************************************
v_sql := 'SELECT ';
v_sql := v_sql || '* ';
v_sql := v_sql || 'FROM ( ';
v_sql := v_sql || 'SELECT ';
v_sql := v_sql || 'EP.PERIODO_ANUAL, ';
v_sql := v_sql || 'MPA.APORTE_ESTRATEGICO, ';
v_sql := v_sql || 'NVL(AVG(MPE.EJECUCION),0) PROMEDIO ';
v_sql := v_sql || 'FROM ';
v_sql := v_sql || 'META_POA_APORTE MPA ';
v_sql := v_sql || 'INNER JOIN ( ';
v_sql := v_sql || 'SELECT * FROM TABLE( ';
v_sql := v_sql || 'PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES() ';
v_sql := v_sql || ') ';
v_sql := v_sql || ') METAS_FUNCIONALES ON MPA.META_POA = METAS_FUNCIONALES.META_POA ';
v_sql := v_sql || 'INNER JOIN META_POA_EVALUACION MPE ON (MPE.META_POA = MPA.META_POA) ';
v_sql := v_sql || 'INNER JOIN ETAPA_PLAN EP ON (EP.ID_ETAPA_PLAN = MPE.ETAPA_PLAN) ';
v_sql := v_sql || 'WHERE ';
v_sql := v_sql || 'MPE.ETAPA_PLAN = ( ';
v_sql := v_sql || 'SELECT ';
v_sql := v_sql || 'EP1.ID_ETAPA_PLAN ';
v_sql := v_sql || 'FROM ETAPA_PLAN EP1 ';
v_sql := v_sql || 'WHERE ';
v_sql := v_sql || 'EP1.TIPO_ETAPA = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = ''param_ppi_ppo_tipoEtapa_evaluacion'') ';
v_sql := v_sql || 'AND EP1.PERIODO_ANUAL = EP.PERIODO_ANUAL ';
v_sql := v_sql || 'AND EP1.TIPO_PLAN_OPERATIVO = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = ''param_ppi_ppo_tipoPlanOperativo_unidad'') ';
v_sql := v_sql || 'AND EP1.FECHA_FINAL_EVALUACION <= TRUNC(SYSDATE) ';
v_sql := v_sql || 'ORDER BY ';
v_sql := v_sql || 'EP1.FECHA_FINAL_EVALUACION DESC ';
v_sql := v_sql || 'FETCH FIRST 1 ROW ONLY ';
v_sql := v_sql || ') ';
v_sql := v_sql || 'GROUP BY EP.PERIODO_ANUAL, MPA.APORTE_ESTRATEGICO, MPE.ETAPA_PLAN ';
v_sql := v_sql || 'ORDER BY ';
v_sql := v_sql || 'MPA.APORTE_ESTRATEGICO ';
v_sql := v_sql || ') ';
v_sql := v_sql || 'PIVOT (MAX(PROMEDIO) FOR PERIODO_ANUAL IN ( ';
FOR i IN 1..v_anos.LAST LOOP
v_sql := v_sql || v_periodos(i).PERIODO_ANUAL || ' as "' || v_anos(i).ANO || '"';
IF i < v_anos.LAST THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')) ORDER BY APORTE_ESTRATEGICO';
-- Ejecutar la consulta PIVOT
OPEN v_result FOR v_sql;
--**************************************************************
--RECUPERAR Y FORMATEAAR LOS DATOS
--**************************************************************
LOOP
FETCH v_result INTO v_aporte,v_promedio_1, v_promedio_2, v_promedio_3, v_promedio_4, v_promedio_5;
EXIT WHEN v_result%NOTFOUND;
PIPE ROW(PPE_APORTE_PROMEDIOS_TYPE(v_aporte,v_promedio_1, v_promedio_2, v_promedio_3, v_promedio_4, v_promedio_5));
END LOOP;
CLOSE v_result;
RETURN;
END PPE_OBTENER_PROMEDIOS_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_PROMEDIOS_X_APORTE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_PROMEDIOS_X_APORTE());
FUNCION: PPE_OBTENER_ACUMULADO_X_APORTE
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_ACUMULADO_X_APORTE
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_ACUMULADO_APORTE_TABLE_TYPE;
DROP TYPE PPI.PPE_ACUMULADO_APORTE_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_APORTE_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
CANTIDAD_APORTES_X_ACCION NUMBER,
REPRESENTATIVIDAD NUMBER,
DISTRIBUCION_1 NUMBER,
DISTRIBUCION_2 NUMBER,
DISTRIBUCION_3 NUMBER,
DISTRIBUCION_4 NUMBER,
DISTRIBUCION_5 NUMBER,
PROGRAMACION_1 NUMBER,
PROGRAMACION_2 NUMBER,
PROGRAMACION_3 NUMBER,
PROGRAMACION_4 NUMBER,
PROGRAMACION_5 NUMBER,
PROMEDIO_1 NUMBER,
PROMEDIO_2 NUMBER,
PROMEDIO_3 NUMBER,
PROMEDIO_4 NUMBER,
PROMEDIO_5 NUMBER,
EJECUCION_1 NUMBER,
EJECUCION_2 NUMBER,
EJECUCION_3 NUMBER,
EJECUCION_4 NUMBER,
EJECUCION_5 NUMBER,
ACUMULADO_APORTE NUMBER
);
GRANT EXECUTE ON PPI.PPE_ACUMULADO_APORTE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato ACUMULADO_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_APORTE_TABLE_TYPE AS TABLE OF PPE_ACUMULADO_APORTE_TYPE;
GRANT EXECUTE ON PPI.PPE_ACUMULADO_APORTE_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_APORTE
RETURN PPE_ACUMULADO_APORTE_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
SELECT
DISTINCT
MPAP.APORTE_ESTRATEGICO APORTE_ESTRATEGICO,
CAN_APO.CANTIDAD_APORTES CANTIDAD_APORTES_X_ACCION,
(1 / CAN_APO.CANTIDAD_APORTES) REPRESENTATIVIDAD,
APD.DISTRIBUCION_1 DISTRIBUCION_1,
APD.DISTRIBUCION_2 DISTRIBUCION_2,
APD.DISTRIBUCION_3 DISTRIBUCION_3,
APD.DISTRIBUCION_4 DISTRIBUCION_4,
APD.DISTRIBUCION_5 DISTRIBUCION_5,
APD.DISTRIBUCION_1*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION_1,
APD.DISTRIBUCION_2*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION_2,
APD.DISTRIBUCION_3*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION_3,
APD.DISTRIBUCION_4*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION_4,
APD.DISTRIBUCION_5*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION_5,
PROMEDIOS.PROMEDIO_1 PROMEDIO_1,
PROMEDIOS.PROMEDIO_2 PROMEDIO_2,
PROMEDIOS.PROMEDIO_3 PROMEDIO_3,
PROMEDIOS.PROMEDIO_4 PROMEDIO_4,
PROMEDIOS.PROMEDIO_5 PROMEDIO_5,
NVL(((APD.DISTRIBUCION_1*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_1)/100),0) EJECUCION_1,
NVL(((APD.DISTRIBUCION_2*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_2)/100),0) EJECUCION_2,
NVL(((APD.DISTRIBUCION_3*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_3)/100),0) EJECUCION_3,
NVL(((APD.DISTRIBUCION_4*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_4)/100),0) EJECUCION_4,
NVL(((APD.DISTRIBUCION_5*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_5)/100),0) EJECUCION_5,
(
NVL(((APD.DISTRIBUCION_1*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_1)/100),0) +
NVL(((APD.DISTRIBUCION_2*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_2)/100),0) +
NVL(((APD.DISTRIBUCION_3*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_3)/100),0) +
NVL(((APD.DISTRIBUCION_4*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_4)/100),0) +
NVL(((APD.DISTRIBUCION_5*(1 / CAN_APO.CANTIDAD_APORTES)*PROMEDIOS.PROMEDIO_5)/100),0)
) AS ACUMULADO_APORTE
FROM
META_POA_APORTE MPAP
INNER JOIN (SELECT * FROM TABLE(PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES())) METAS_FUNCIONALES on MPAP.META_POA = METAS_FUNCIONALES.META_POA
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO)
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.ID_ACCION_ESTRATEGICA = APE.ACCION_ESTRATEGICA)
INNER JOIN (SELECT ACCION_ESTRATEGICA, COUNT(*) AS CANTIDAD_APORTES FROM PPI.APORTE_ESTRATEGICO GROUP BY ACCION_ESTRATEGICA) CAN_APO ON CAN_APO.ACCION_ESTRATEGICA = ACE.ID_ACCION_ESTRATEGICA
-- DISTRIBUCION PORCENTUAL
INNER JOIN (
SELECT * FROM TABLE(PPI.PPE_OBTENER_APD_X_APORTE())
) APD ON APE.ID_APORTE_ESTRATEGICO = APD.APORTE_ESTRATEGICO
-- PROMEDIOS
INNER JOIN (
SELECT * FROM TABLE(PPI.PPE_OBTENER_PROMEDIOS_X_APORTE())
) PROMEDIOS ON APE.ID_APORTE_ESTRATEGICO = PROMEDIOS.APORTE_ESTRATEGICO
ORDER BY
MPAP.APORTE_ESTRATEGICO
) LOOP
PIPE ROW (PPE_ACUMULADO_APORTE_TYPE(
REC.APORTE_ESTRATEGICO,
REC.CANTIDAD_APORTES_X_ACCION,
REC.REPRESENTATIVIDAD,
REC.DISTRIBUCION_1,
REC.DISTRIBUCION_2,
REC.DISTRIBUCION_3,
REC.DISTRIBUCION_4,
REC.DISTRIBUCION_5,
REC.PROGRAMACION_1,
REC.PROGRAMACION_2,
REC.PROGRAMACION_3,
REC.PROGRAMACION_4,
REC.PROGRAMACION_5,
REC.PROMEDIO_1,
REC.PROMEDIO_2,
REC.PROMEDIO_3,
REC.PROMEDIO_4,
REC.PROMEDIO_5,
REC.EJECUCION_1,
REC.EJECUCION_2,
REC.EJECUCION_3,
REC.EJECUCION_4,
REC.EJECUCION_5,
REC.ACUMULADO_APORTE
));
END LOOP;
RETURN;
END PPE_OBTENER_ACUMULADO_X_APORTE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_ACUMULADO_X_APORTE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_APORTE());
FUNCION: PPE_OBTENER_ACUMULADO_X_ACCION
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_ACUMULADO_X_ACCION
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_ACUMULADO_ACCION_TABLE_TYPE;
DROP TYPE PPI.PPE_ACUMULADO_ACCION_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_ACCION;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_ACCION_TYPE AS OBJECT (
ACCION_ESTRATEGICA NUMBER,
ACUMULADO_ACCION NUMBER
);
GRANT EXECUTE ON PPI.PPE_ACUMULADO_ACCION_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_ACCION_TABLE_TYPE AS TABLE OF PPE_ACUMULADO_ACCION_TYPE;
GRANT EXECUTE ON PPI.PPE_ACUMULADO_ACCION_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_ACCION
RETURN PPE_ACUMULADO_ACCION_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
SELECT
ACE.ID_ACCION_ESTRATEGICA ACCION_ESTRATEGICA,
SUM(ACUMULADO.ACUMULADO_APORTE) ACUMULADO_ACCION
FROM
ACCION_ESTRATEGICA ACE
INNER JOIN
APORTE_ESTRATEGICO APE ON (APE.ACCION_ESTRATEGICA = ACE.ID_ACCION_ESTRATEGICA)
-- ACUMULADO
INNER JOIN (
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_APORTE())
) ACUMULADO ON APE.ID_APORTE_ESTRATEGICO = ACUMULADO.APORTE_ESTRATEGICO
GROUP BY
ACE.ID_ACCION_ESTRATEGICA
ORDER BY
ACE.ID_ACCION_ESTRATEGICA
)
LOOP
PIPE ROW (PPE_ACUMULADO_ACCION_TYPE(rec.ACCION_ESTRATEGICA,rec.ACUMULADO_ACCION));
END LOOP;
--DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END PPE_OBTENER_ACUMULADO_X_ACCION;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_ACUMULADO_X_ACCION TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_ACCION());
FUNCION: PPE_OBTENER_ACUMULADO_X_METAPMP
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_ACUMULADO_X_METAPMP
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_ACUMULADO_METAPMP_TABLE_TYPE;
DROP TYPE PPI.PPE_ACUMULADO_METAPMP_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_METAPMP;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_METAPMP_TYPE AS OBJECT (
META_PMP NUMBER,
ACUMULADO_METAPMP NUMBER
);
GRANT EXECUTE ON PPI.PPE_ACUMULADO_METAPMP_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_METAPMP_TABLE_TYPE AS TABLE OF PPE_ACUMULADO_METAPMP_TYPE;
GRANT EXECUTE ON PPI.PPE_ACUMULADO_METAPMP_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_METAPMP
RETURN PPE_ACUMULADO_METAPMP_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
SELECT
MPMP.ID_META_PMP META_PMP,
NVL(AVG(ACUMULADO_ACCION.ACUMULADO_ACCION),0) AS ACUMULADO_META
FROM
META_PMP MPMP
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.META_PMP = MPMP.ID_META_PMP)
--ACUMULADO ACCION
INNER JOIN (
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_ACCION())
) ACUMULADO_ACCION ON ACE.ID_ACCION_ESTRATEGICA = ACUMULADO_ACCION.ACCION_ESTRATEGICA
GROUP BY
MPMP.ID_META_PMP
ORDER BY
MPMP.ID_META_PMP
)
LOOP
PIPE ROW (PPE_ACUMULADO_METAPMP_TYPE(rec.META_PMP,rec.ACUMULADO_META));
END LOOP;
--DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END PPE_OBTENER_ACUMULADO_X_METAPMP;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_ACUMULADO_X_METAPMP TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_METAPMP());
FUNCION: PPE_OBTENER_ACUMULADO_X_PRIORIDAD
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_ACUMULADO_X_PRIORIDAD
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_ACUMULADO_PRIORIDAD_TABLE_TYPE;
DROP TYPE PPI.PPE_ACUMULADO_PRIORIDAD_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_PRIORIDAD;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_PRIORIDAD_TYPE AS OBJECT (
PRIORIDAD_ESTRATEGICA_PMP NUMBER,
ACUMULADO_PRIORIDAD NUMBER
);
GRANT EXECUTE ON PPI.PPE_ACUMULADO_PRIORIDAD_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_ACUMULADO_PRIORIDAD_TABLE_TYPE AS TABLE OF PPE_ACUMULADO_PRIORIDAD_TYPE;
GRANT EXECUTE ON PPI.PPE_ACUMULADO_PRIORIDAD_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_ACUMULADO_X_PRIORIDAD
RETURN PPE_ACUMULADO_PRIORIDAD_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
SELECT
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP PRIORIDAD_ESTRATEGICA_PMP,
NVL(AVG(ACUMULADO_METAPMP.ACUMULADO_METAPMP),0) AS ACUMULADO_PRIORIDAD
FROM
PRIORIDAD_ESTRATEGICA_PMP PEPMP
INNER JOIN DETALLE_PMP DPMP ON (DPMP.PRIORIDAD_ESTRATEGICA_PMP = PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP)
INNER JOIN META_PMP MPMP ON (MPMP.DETALLE_PMP = DPMP.ID_DETALLE_PMP)
--ACUMULADO METAPMP
INNER JOIN (
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_METAPMP())
) ACUMULADO_METAPMP ON MPMP.ID_META_PMP = ACUMULADO_METAPMP.META_PMP
GROUP BY
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP
ORDER BY
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP
)
LOOP
PIPE ROW (PPE_ACUMULADO_PRIORIDAD_TYPE(REC.PRIORIDAD_ESTRATEGICA_PMP,REC.ACUMULADO_PRIORIDAD));
END LOOP;
--DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END PPE_OBTENER_ACUMULADO_X_PRIORIDAD;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_ACUMULADO_X_PRIORIDAD TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_PRIORIDAD());
FUNCION: PPE_OBTENER_AVANCE_PLP
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: PPE_OBTENER_AVANCE_PLP
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PPE_AVANCE_PLP_TABLE_TYPE;
DROP TYPE PPI.PPE_AVANCE_PLP_TYPE;
DROP FUNCTION PPI.PPE_OBTENER_AVANCE_PLP;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_AVANCE_PLP_TYPE AS OBJECT (
PERIODO_ANUAL NUMBER,
PLP_CODIGO VARCHAR2(500),
EJE_PLP_CODIGO NUMBER,
EJE_PLP_DESCRIPCION VARCHAR2(500),
OBJ_PLP_CODIGO NUMBER,
OBJ_PLP_DESCRIPCION VARCHAR2(500),
EJE_TRA_CODIGO NUMBER,
EJE_TRA_DESCRIPCION VARCHAR2(500),
PRI_PMP_ID NUMBER,
PRI_PMP_CODIGO NUMBER,
PRI_PMP_DESCRIPCION VARCHAR2(500),
ACUMULADO_PRIORIDAD NUMBER,
OBJ_PMP_CODIGO NUMBER,
OBJ_PMP_DESCRIPCION VARCHAR2(500),
MPMP_ID NUMBER,
MPMP_CODIGO NUMBER,
MPMP_DESCRIPCION VARCHAR2(500),
ACUMULADO_METAPMP NUMBER,
AMBITO_ACCION_UNIVERITARIA VARCHAR2(500),
ENCARGADO_MONITOERO VARCHAR2(500),
EPES_CODIGO NUMBER,
EPES_NOMBRE VARCHAR2(500),
TEPES_NOMBRE VARCHAR2(500),
OPDS_CODIGO NUMBER,
OPDS_NOMBRE VARCHAR2(500),
UE_PACE_NOMBRE VARCHAR2(500),
ACE_ID NUMBER,
ACE_CODIGO NUMBER,
ACE_DESCRIPCION VARCHAR2(500),
ACUMULADO_ACCION NUMBER,
UE_PAPE_NOMBRE VARCHAR2(500),
APE_CODIGO NUMBER,
APE_DESCRIPCION VARCHAR2(500),
CUANTIFICACION NUMBER,
LINEA_BASE NUMBER,
FUENTE_RECURSO VARCHAR2(500),
JORNADA NUMBER,
APE_ID NUMBER,
CANTIDAD_APORTES_X_ACCION NUMBER,
REPRESENTATIVIDAD NUMBER,
DISTRIBUCION_1 NUMBER,
DISTRIBUCION_2 NUMBER,
DISTRIBUCION_3 NUMBER,
DISTRIBUCION_4 NUMBER,
DISTRIBUCION_5 NUMBER,
PROGRAMACION_1 NUMBER,
PROGRAMACION_2 NUMBER,
PROGRAMACION_3 NUMBER,
PROGRAMACION_4 NUMBER,
PROGRAMACION_5 NUMBER,
PROMEDIO_1 NUMBER,
PROMEDIO_2 NUMBER,
PROMEDIO_3 NUMBER,
PROMEDIO_4 NUMBER,
PROMEDIO_5 NUMBER,
EJECUCION_1 NUMBER,
EJECUCION_2 NUMBER,
EJECUCION_3 NUMBER,
EJECUCION_4 NUMBER,
EJECUCION_5 NUMBER,
ACUMULADO_APORTE NUMBER
);
GRANT EXECUTE ON PPI.PPE_AVANCE_PLP_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PPE_AVANCE_PLP_TABLE_TYPE AS TABLE OF PPE_AVANCE_PLP_TYPE;
GRANT EXECUTE ON PPI.PPE_AVANCE_PLP_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.PPE_OBTENER_AVANCE_PLP
RETURN PPE_AVANCE_PLP_TABLE_TYPE PIPELINED AS
BEGIN
FOR REC IN (
--************************************************************
-- FUNCION: OBTENER EL AVANCE PLP
-- VERSION: 1.0.11
--************************************************************
SELECT
DISTINCT
PO.PERIODO_ANUAL PERIODO_ANUAL,
PLP.CODIGO PLP_CODIGO,
EJE_PLP.CODIGO EJE_PLP_CODIGO,
EJE_PLP.DESCRIPCION EJE_PLP_DESCRIPCION,
OBJ_PLP.CODIGO OBJ_PLP_CODIGO,
OBJ_PLP.DESCRIPCION OBJ_PLP_DESCRIPCION,
EJE_TRA.CODIGO EJE_TRA_CODIGO,
EJE_TRA.DESCRIPCION EJE_TRA_DESCRIPCION,
PRI_PMP.ID_PRIORIDAD_ESTRATEGICA_PMP PRI_PMP_ID,
PRI_PMP.CODIGO PRI_PMP_CODIGO,
PRI_PMP.DESCRIPCION PRI_PMP_DESCRIPCION,
PRIORIDAD.ACUMULADO_PRIORIDAD ACUMULADO_PRIORIDAD,
OBJ_PMP.CODIGO OBJ_PMP_CODIGO,
OBJ_PMP.DESCRIPCION OBJ_PMP_DESCRIPCION,
MPMP.ID_META_PMP MPMP_ID,
MPMP.CODIGO MPMP_CODIGO,
MPMP.DESCRIPCION MPMP_DESCRIPCION,
METAPMP.ACUMULADO_METAPMP ACUMULADO_METAPMP,
AAU.NOMBRE AMBITO_ACCION_UNIVERITARIA,
UE_EM.NOMBRE ENCARGADO_MONITOERO,
EPES.CODIGO EPES_CODIGO,
EPES.NOMBRE EPES_NOMBRE,
TEPES.NOMBRE TEPES_NOMBRE,
OPDS.CODIGO OPDS_CODIGO,
OPDS.NOMBRE OPDS_NOMBRE,
UE_PACE.NOMBRE UE_PACE_NOMBRE,
ACE.ID_ACCION_ESTRATEGICA ACE_ID,
ACE.CODIGO ACE_CODIGO,
ACE.DESCRIPCION ACE_DESCRIPCION,
ACCION.ACUMULADO_ACCION ACUMULADO_ACCION,
UE_PAPE.NOMBRE UE_PAPE_NOMBRE,
APE.CODIGO APE_CODIGO,
APE.DESCRIPCION APE_DESCRIPCION,
APE.CUANTIFICACION CUANTIFICACION,
APE.LINEA_BASE LINEA_BASE,
FR.NOMBRE FUENTE_RECURSO,
APE.JORNADA JORNADA,
APE.ID_APORTE_ESTRATEGICO APE_ID,
APORTE.CANTIDAD_APORTES_X_ACCION CANTIDAD_APORTES_X_ACCION,
APORTE.REPRESENTATIVIDAD REPRESENTATIVIDAD,
APORTE.DISTRIBUCION_1 DISTRIBUCION_1,
APORTE.DISTRIBUCION_2 DISTRIBUCION_2,
APORTE.DISTRIBUCION_3 DISTRIBUCION_3,
APORTE.DISTRIBUCION_4 DISTRIBUCION_4,
APORTE.DISTRIBUCION_5 DISTRIBUCION_5,
APORTE.PROGRAMACION_1 PROGRAMACION_1,
APORTE.PROGRAMACION_2 PROGRAMACION_2,
APORTE.PROGRAMACION_3 PROGRAMACION_3,
APORTE.PROGRAMACION_4 PROGRAMACION_4,
APORTE.PROGRAMACION_5 PROGRAMACION_5,
APORTE.PROMEDIO_1 PROMEDIO_1,
APORTE.PROMEDIO_2 PROMEDIO_2,
APORTE.PROMEDIO_3 PROMEDIO_3,
APORTE.PROMEDIO_4 PROMEDIO_4,
APORTE.PROMEDIO_5 PROMEDIO_5,
APORTE.EJECUCION_1 EJECUCION_1,
APORTE.EJECUCION_2 EJECUCION_2,
APORTE.EJECUCION_3 EJECUCION_3,
APORTE.EJECUCION_4 EJECUCION_4,
APORTE.EJECUCION_5 EJECUCION_5,
APORTE.ACUMULADO_APORTE ACUMULADO_APORTE
FROM
META_POA_EVALUACION MPE
INNER JOIN META_POA MP ON (MP.ID_META_POA = MPE.META_POA)
INNER JOIN OBJETIVO_POA OP ON (OP.ID_OBJETIVO_POA = MP.OBJETIVO_POA)
INNER JOIN PLAN_OPERATIVO PO ON (PO.ID_PLAN_OPERATIVO = OP.PLAN_OPERATIVO)
INNER JOIN UNIDAD_EJECUTORA UE_PO ON (UE_PO.ID_UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA)
INNER JOIN EVALUACION_OPERATIVA EO ON (EO.PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO)
INNER JOIN META_POA_APORTE MPA ON (MPA.META_POA = MP.ID_META_POA)
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPA.APORTE_ESTRATEGICO)
INNER JOIN PLAN_APORTE_ESTRATEGICO PAPE ON (PAPE.ID_PLAN_APORTE_ESTRATEGICO = APE.PLAN_APORTE_ESTRATEGICO)
INNER JOIN UNIDAD_EJECUTORA UE_PAPE ON (UE_PAPE.ID_UNIDAD_EJECUTORA = PAPE.UNIDAD_EJECUTORA)
LEFT JOIN APORTE_PAE_FUENTE_RECURSO APAEFR ON (APAEFR.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO) --FALTAN
LEFT JOIN FUENTE_RECURSO FR ON (FR.ID_FUENTE_RECURSO = APAEFR.FUENTE_RECURSO) --FALTAN
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.ID_ACCION_ESTRATEGICA = APE.ACCION_ESTRATEGICA)
INNER JOIN PLAN_ACCION_ESTRATEGICA PACE ON (PACE.ID_PLAN_ACCION_ESTRATEGICA = ACE.PLAN_ACCION_ESTRATEGICA)
INNER JOIN UNIDAD_EJECUTORA UE_PACE ON (UE_PACE.ID_UNIDAD_EJECUTORA = PACE.UNIDAD_EJECUTORA)
INNER JOIN META_PMP MPMP ON (MPMP.ID_META_PMP = ACE.META_PMP)
INNER JOIN AMBITO_ACCION_UNIVERSITARIA AAU ON (AAU.ID_AMBITO_ACCION_UNIVERSITARIA = MPMP.AMBITO_ACCION_UNIVERSITARIA)
INNER JOIN ENCARGADO_MONITOREO EM ON (EM.ID_ENCARGADO_MONITOREO = MPMP.ENCARGADO_MONITOREO)
INNER JOIN UNIDAD_EJECUTORA UE_EM ON (UE_EM.ID_UNIDAD_EJECUTORA = EM.UNIDAD_EJECUTORA)
LEFT JOIN META_PMP_EJE_PES MPEP ON (MPEP.META_PMP = MPMP.ID_META_PMP) --VACIA
LEFT JOIN EJE_PES EPES ON (EPES.ID_EJE_PES = MPEP.EJE_PES)
LEFT JOIN TIPO_EJE_PES TEPES ON (TEPES.ID_TIPO_EJE_PES = EPES.TIPO_EJE_PES)
LEFT JOIN META_PMP_OBJETIVO_PDS MPOPDS ON (MPOPDS.META_PMP = MPMP.ID_META_PMP) --VACIA
LEFT JOIN OBJETIVO_PDS OPDS ON (OPDS.ID_OBJETIVO_PDS = MPOPDS.OBJETIVO_PDS)
INNER JOIN DETALLE_PMP DET_PMP ON (DET_PMP.ID_DETALLE_PMP = MPMP.DETALLE_PMP)
INNER JOIN PRIORIDAD_ESTRATEGICA_PMP PRI_PMP ON (PRI_PMP.ID_PRIORIDAD_ESTRATEGICA_PMP = DET_PMP.PRIORIDAD_ESTRATEGICA_PMP)
INNER JOIN OBJETIVO_ESTRATEGICO_PMP OBJ_PMP ON (OBJ_PMP.ID_OBJETIVO_ESTRATEGICO_PMP = DET_PMP.OBJETIVO_ESTRATEGICO_PMP)
INNER JOIN EJE_ESTRATEGICO_PLP EJE_PLP ON (EJE_PLP.ID_EJE_ESTRATEGICO_PLP = DET_PMP.EJE_ESTRATEGICO_LARGO_PLAZO)
INNER JOIN DETALLE_PLP DET_PLP ON (DET_PLP.EJE_ESTRATEGICO_PLP = EJE_PLP.ID_EJE_ESTRATEGICO_PLP)
INNER JOIN OBJETIVO_ESTRATEGICO_PLP OBJ_PLP ON (OBJ_PLP.ID_OBJETIVO_ESTRATEGICO_PLP = DET_PLP.OBJETIVO_ESTRATEGICO_PLP)
INNER JOIN DETALLE_PLP_EJE_TRANSVERSAL DET_EJE_TRA ON (DET_EJE_TRA.DETALLE_PLP = DET_PLP.ID_DETALLE_PLP)
LEFT JOIN EJE_TRANSVERSAL_PLP EJE_TRA ON (EJE_TRA.ID_EJE_TRANSVERSAL_PLP = DET_EJE_TRA.EJE_TRANSVERSAL_PLP) --VACIA
INNER JOIN PLAN_LARGO_PLAZO PLP ON (PLP.ID_PLAN_LARGO_PLAZO = DET_PLP.PLAN_LARGO_PLAZO)
--METAS FUNCIONALES
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_METAS_OPE_FUNCIONALES())
) METAS_FUNCIONALES on MPE.META_POA = METAS_FUNCIONALES.META_POA AND METAS_FUNCIONALES.PERIODO_ANUAL = PO.PERIODO_ANUAL
--AVANCE APORTE
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_APORTE())
) APORTE ON APE.ID_APORTE_ESTRATEGICO = APORTE.APORTE_ESTRATEGICO
--AVANCE ACCION
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_ACCION())
) ACCION ON ACE.ID_ACCION_ESTRATEGICA = ACCION.ACCION_ESTRATEGICA
--AVANCE METAPMP
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_METAPMP())
) METAPMP ON MPMP.ID_META_PMP = METAPMP.META_PMP
--AVANCE PRIORIDAD
INNER JOIN (SELECT *
FROM TABLE(PPI.PPE_OBTENER_ACUMULADO_X_PRIORIDAD())
) PRIORIDAD ON PRI_PMP.ID_PRIORIDAD_ESTRATEGICA_PMP = PRIORIDAD.PRIORIDAD_ESTRATEGICA_PMP
WHERE
MPE.ETAPA_PLAN = (
SELECT
EP.ID_ETAPA_PLAN
FROM ETAPA_PLAN EP
WHERE
EP.TIPO_ETAPA = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoEtapa_evaluacion')
AND EP.PERIODO_ANUAL = PO.PERIODO_ANUAL
AND EP.TIPO_PLAN_OPERATIVO = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoPlanOperativo_unidad')
AND EP.FECHA_FINAL_EVALUACION <= TRUNC(SYSDATE)
ORDER BY
EP.FECHA_FINAL_EVALUACION DESC
FETCH FIRST 1 ROW ONLY
)
ORDER BY
EJE_PLP.CODIGO,
OBJ_PLP.CODIGO,
EJE_TRA.CODIGO,
PRI_PMP.CODIGO,
OBJ_PMP.CODIGO,
MPMP.CODIGO,
AAU.NOMBRE,
UE_EM.NOMBRE,
EPES.CODIGO,
OPDS.CODIGO,
UE_PACE.NOMBRE,
ACE.CODIGO,
UE_PAPE.NOMBRE,
APE.CODIGO
)
LOOP
PIPE ROW (PPE_AVANCE_PLP_TYPE(
REC.PERIODO_ANUAL,
REC.PLP_CODIGO,
REC.EJE_PLP_CODIGO,
REC.EJE_PLP_DESCRIPCION,
REC.OBJ_PLP_CODIGO,
REC.OBJ_PLP_DESCRIPCION,
REC.EJE_TRA_CODIGO,
REC.EJE_TRA_DESCRIPCION,
REC.PRI_PMP_ID,
REC.PRI_PMP_CODIGO,
REC.PRI_PMP_DESCRIPCION,
REC.ACUMULADO_PRIORIDAD,
REC.OBJ_PMP_CODIGO,
REC.OBJ_PMP_DESCRIPCION,
REC.MPMP_ID,
REC.MPMP_CODIGO,
REC.MPMP_DESCRIPCION,
REC.ACUMULADO_METAPMP,
REC.AMBITO_ACCION_UNIVERITARIA,
REC.ENCARGADO_MONITOERO,
REC.EPES_CODIGO,
REC.EPES_NOMBRE,
REC.TEPES_NOMBRE,
REC.OPDS_CODIGO,
REC.OPDS_NOMBRE,
REC.UE_PACE_NOMBRE,
REC.ACE_ID,
REC.ACE_CODIGO,
REC.ACE_DESCRIPCION,
REC.ACUMULADO_ACCION,
REC.UE_PAPE_NOMBRE,
REC.APE_CODIGO,
REC.APE_DESCRIPCION,
REC.CUANTIFICACION,
REC.LINEA_BASE,
REC.FUENTE_RECURSO,
REC.JORNADA,
REC.APE_ID,
REC.CANTIDAD_APORTES_X_ACCION,
REC.REPRESENTATIVIDAD,
REC.DISTRIBUCION_1,
REC.DISTRIBUCION_2,
REC.DISTRIBUCION_3,
REC.DISTRIBUCION_4,
REC.DISTRIBUCION_5,
REC.PROGRAMACION_1,
REC.PROGRAMACION_2,
REC.PROGRAMACION_3,
REC.PROGRAMACION_4,
REC.PROGRAMACION_5,
REC.PROMEDIO_1,
REC.PROMEDIO_2,
REC.PROMEDIO_3,
REC.PROMEDIO_4,
REC.PROMEDIO_5,
REC.EJECUCION_1,
REC.EJECUCION_2,
REC.EJECUCION_3,
REC.EJECUCION_4,
REC.EJECUCION_5,
REC.ACUMULADO_APORTE
));
END LOOP;
--DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END PPE_OBTENER_AVANCE_PLP;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.PPE_OBTENER_AVANCE_PLP TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.PPE_OBTENER_AVANCE_PLP()) AVANCE_PLP;
Parte II: Creación de Vista
NOTA IMPORTANTE: las vista no llevan parámetros obtienen todos los datos a nivel de código se filtran
- Con base en la funciones anteriores tenemos la consulta
SELECT
PERIODO_ANUAL,
PLP_CODIGO,
EJE_PLP_CODIGO,
EJE_PLP_DESCRIPCION,
OBJ_PLP_CODIGO,
OBJ_PLP_DESCRIPCION,
EJE_TRA_CODIGO,
EJE_TRA_DESCRIPCION,
PRI_PMP_ID,
PRI_PMP_CODIGO,
PRI_PMP_DESCRIPCION,
ACUMULADO_PRIORIDAD,
OBJ_PMP_CODIGO,
OBJ_PMP_DESCRIPCION,
MPMP_ID,
MPMP_CODIGO,
MPMP_DESCRIPCION,
ACUMULADO_METAPMP,
AMBITO_ACCION_UNIVERITARIA,
ENCARGADO_MONITOERO,
EPES_CODIGO,
EPES_NOMBRE,
TEPES_NOMBRE,
OPDS_CODIGO,
OPDS_NOMBRE,
UE_PACE_NOMBRE,
ACE_ID,
ACE_CODIGO,
ACE_DESCRIPCION,
ACUMULADO_ACCION,
UE_PAPE_NOMBRE,
APE_CODIGO,
APE_DESCRIPCION,
CUANTIFICACION,
LINEA_BASE,
FUENTE_RECURSO,
JORNADA,
APE_ID,
CANTIDAD_APORTES_X_ACCION,
REPRESENTATIVIDAD,
DISTRIBUCION_1,
DISTRIBUCION_2,
DISTRIBUCION_3,
DISTRIBUCION_4,
DISTRIBUCION_5,
PROGRAMACION_1,
PROGRAMACION_2,
PROGRAMACION_3,
PROGRAMACION_4,
PROGRAMACION_5,
PROMEDIO_1,
PROMEDIO_2,
PROMEDIO_3,
PROMEDIO_4,
PROMEDIO_5,
EJECUCION_1,
EJECUCION_2,
EJECUCION_3,
EJECUCION_4,
EJECUCION_5,
ACUMULADO_APORTE
FROM TABLE(PPI.PPE_OBTENER_AVANCE_PLP()) AVANCE_PLP;
Notas:
- Esta consultta ya trae el campo necesario para el filtrado
PERIODO_ANUAL,
- Ahora la vamos a modificar para que contenga el numero de fila como ID ya que es requerido para las vista
ROWNUM AS ID,
- Quedando así
SELECT
ROWNUM AS ID,
PERIODO_ANUAL,
PLP_CODIGO,
EJE_PLP_CODIGO,
EJE_PLP_DESCRIPCION,
OBJ_PLP_CODIGO,
OBJ_PLP_DESCRIPCION,
EJE_TRA_CODIGO,
EJE_TRA_DESCRIPCION,
PRI_PMP_ID,
PRI_PMP_CODIGO,
PRI_PMP_DESCRIPCION,
ACUMULADO_PRIORIDAD,
OBJ_PMP_CODIGO,
OBJ_PMP_DESCRIPCION,
MPMP_ID,
MPMP_CODIGO,
MPMP_DESCRIPCION,
ACUMULADO_METAPMP,
AMBITO_ACCION_UNIVERITARIA,
ENCARGADO_MONITOERO,
EPES_CODIGO,
EPES_NOMBRE,
TEPES_NOMBRE,
OPDS_CODIGO,
OPDS_NOMBRE,
UE_PACE_NOMBRE,
ACE_ID,
ACE_CODIGO,
ACE_DESCRIPCION,
ACUMULADO_ACCION,
UE_PAPE_NOMBRE,
APE_CODIGO,
APE_DESCRIPCION,
CUANTIFICACION,
LINEA_BASE,
FUENTE_RECURSO,
JORNADA,
APE_ID,
CANTIDAD_APORTES_X_ACCION,
REPRESENTATIVIDAD,
DISTRIBUCION_1,
DISTRIBUCION_2,
DISTRIBUCION_3,
DISTRIBUCION_4,
DISTRIBUCION_5,
PROGRAMACION_1,
PROGRAMACION_2,
PROGRAMACION_3,
PROGRAMACION_4,
PROGRAMACION_5,
PROMEDIO_1,
PROMEDIO_2,
PROMEDIO_3,
PROMEDIO_4,
PROMEDIO_5,
EJECUCION_1,
EJECUCION_2,
EJECUCION_3,
EJECUCION_4,
EJECUCION_5,
ACUMULADO_APORTE
FROM TABLE(PPI.PPE_OBTENER_AVANCE_PLP()) AVANCE_PLP;
VistaAvancePLPCreate.sql
- Ahora debemos crear el siguiente archivo
- Ubicación: PPI-PPE-> service -> src -> main -> resources -> sql
- Para almacenar el respaldo de la creación de la vista
- Le agregamos
/*
* Copyright (C) 2022.
*
* Centro de Gestion Informatica
* Direccion de Tecnologias de la Informacion y Comunicacion
* Universidad Nacional - Costa Rica
* http://www.una.ac.cr
*
*/
/********************************************************/
/********************************************************/
/* DOCUMENTACIÓN */
/********************************************************/
/********************************************************/
/**
* @author: Gustavo Matamoros González
* @since: 06/12/2023
* @bug: BTPPI-342
* @funcion: Obtener el avance del Plan de Largo PLazo (PLP)
*/
/********************************************************/
/********************************************************/
/* ELIMINAR LA VISTA */
/********************************************************/
/********************************************************/
DROP PUBLIC SYNONYM VISTA_AVANCE_PLP;
DROP VIEW PPI.VISTA_AVANCE_PLP;
/********************************************************/
/********************************************************/
/* CREACIÓN DE LA VISTA */
/********************************************************/
/********************************************************/
CREATE OR REPLACE FORCE EDITIONABLE VIEW PPI.VISTA_AVANCE_PLP AS
SELECT
ROWNUM AS ID,
PERIODO_ANUAL,
PLP_CODIGO,
EJE_PLP_CODIGO,
EJE_PLP_DESCRIPCION,
OBJ_PLP_CODIGO,
OBJ_PLP_DESCRIPCION,
EJE_TRA_CODIGO,
EJE_TRA_DESCRIPCION,
PRI_PMP_ID,
PRI_PMP_CODIGO,
PRI_PMP_DESCRIPCION,
ACUMULADO_PRIORIDAD,
OBJ_PMP_CODIGO,
OBJ_PMP_DESCRIPCION,
MPMP_ID,
MPMP_CODIGO,
MPMP_DESCRIPCION,
ACUMULADO_METAPMP,
AMBITO_ACCION_UNIVERITARIA,
ENCARGADO_MONITOERO,
EPES_CODIGO,
EPES_NOMBRE,
TEPES_NOMBRE,
OPDS_CODIGO,
OPDS_NOMBRE,
UE_PACE_NOMBRE,
ACE_ID,
ACE_CODIGO,
ACE_DESCRIPCION,
ACUMULADO_ACCION,
UE_PAPE_NOMBRE,
APE_CODIGO,
APE_DESCRIPCION,
CUANTIFICACION,
LINEA_BASE,
FUENTE_RECURSO,
JORNADA,
APE_ID,
CANTIDAD_APORTES_X_ACCION,
REPRESENTATIVIDAD,
DISTRIBUCION_1,
DISTRIBUCION_2,
DISTRIBUCION_3,
DISTRIBUCION_4,
DISTRIBUCION_5,
PROGRAMACION_1,
PROGRAMACION_2,
PROGRAMACION_3,
PROGRAMACION_4,
PROGRAMACION_5,
PROMEDIO_1,
PROMEDIO_2,
PROMEDIO_3,
PROMEDIO_4,
PROMEDIO_5,
EJECUCION_1,
EJECUCION_2,
EJECUCION_3,
EJECUCION_4,
EJECUCION_5,
ACUMULADO_APORTE
FROM TABLE(PPI.PPE_OBTENER_AVANCE_PLP()) AVANCE_PLP;
/********************************************************/
/********************************************************/
/* CREACIÓN DE SINONIMO */
/********************************************************/
/********************************************************/
CREATE PUBLIC SYNONYM VISTA_AVANCE_PLP FOR PPI.VISTA_AVANCE_PLP;
/********************************************************/
/********************************************************/
/* GRANT'S */
/********************************************************/
/********************************************************/
--GRANT WWW_SIGESA / ANALISTA / ANALISTA_SIGESA
GRANT SELECT, REFERENCES ON PPI.VISTA_AVANCE_PLP TO WWW_SIGESA;
GRANT SELECT ON PPI.VISTA_AVANCE_PLP TO ANALISTA, ANALISTA_SIGESA;
/********************************************************/
/********************************************************/
/* CONSULTAR VISTA */
/********************************************************/
/********************************************************/
SELECT * FROM VISTA_AVANCE_PLP;
VistaAvancePLPI18n.sql
- Ahora debemos crear un script que inserte la internacionalización
/*
* Copyright (C) 2022.
*
* Centro de Gestion Informatica
* Direccion de Tecnologias de la Informacion y Comunicacion
* Universidad Nacional - Costa Rica
* http://www.una.ac.cr
*
*/
/********************************************************/
/********************************************************/
/* DOCUMENTACIÓN */
/********************************************************/
/********************************************************/
/**
* @author: Gustavo Matamoros González
* @since: 06/12/2023
* @bug: BTPPI-342
* @funcion: Insertar internacionalización para VISTA_AVANCE_PLP
*/
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejeEstrategicoPLPCodigo_header', 'Código Eje Estratégico PLP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejeEstrategicoPLPDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoEstrategicoPLPCodigo_header', 'Código Objetivo Estratégico PLP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoEstrategicoPLPDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejeTransversalPLPCodigo_header', 'Código Eje Transversal PLP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejeTransversalDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_prioridadEstrategicaPMPCodigo_header', 'Código Prioridad Estratégica PMP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_prioridadEstrategicaPMPDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_prioridadEstrategicaPMPAvance_header', 'Avance Prioridad Estratégica PMP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoEstrategicoPMPCodigo_header', 'Código Objetivo Estratégico PMP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoEstrategicoPMPDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_metaEstrategicaPMPCodigo_header', 'Código Meta Estratégica PMP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_metaEstrategicaPMPDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_metaEstrategicaPMPAvance_header', 'Avance Meta Estratégica PMP', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ambitoAccionUniversitaria_header', 'Ámbito de Acción Universitaria', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_encargadoMonitoreo_header', 'Encargado de Monitoreo', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejePlanesCodigo_header', 'Código Eje PLANES', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejePlanesNombre_header', 'Eje PLANES', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_ejePlanesTipo_header', 'Tipo Eje PLANES', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoPDSCodigo_header', 'Código Objetivo PDS', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_objetivoPDSNombre_header', 'Objetivo PDS', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_accionEstrategicaUnidadEjecutora_header', 'Unidad Ejecutora de Acción Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_accionEstrategicaCodigo_header', 'Código Acción Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_accionEstrategicaDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_accionEstrategicaAvance_header', 'Avance Acción Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoUnidadEjecutora_header', 'Unidad Ejecutora de Aporte Estratégico', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoCodigo_header', 'Código Aporte Estratégico', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDescripcion_header', 'Descripción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoCuantificacion_header', 'Cuantificación', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoLineaBase_header', 'Línea Base', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoFuenteRecursos_header', 'Fuente de Recursos', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoJornada_header', 'Jornada', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoCantidadAportesAccion_header', 'Cantidad de Aportes por Acción', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoRepresentatividad_header', 'Representatividad', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDistribucion1_header', 'Distribucion 1', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDistribucion2_header', 'Distribucion 2', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDistribucion3_header', 'Distribucion 3', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDistribucion4_header', 'Distribucion 4', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoDistribucion5_header', 'Distribucion 5', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoProgramacion1_header', 'Programación 1', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoProgramacion2_header', 'Programación 2', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoProgramacion3_header', 'Programación 3', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoProgramacion4_header', 'Programación 4', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoProgramacion5_header', 'Programación 5', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoPromedio1_header', 'Promedio 1', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoPromedio2_header', 'Promedio 2', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoPromedio3_header', 'Promedio 3', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoPromedio4_header', 'Promedio 4', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoPromedio5_header', 'Promedio 5', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoEjecucion1_header', 'Ejecución 1', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoEjecucion2_header', 'Ejecución 2', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoEjecucion3_header', 'Ejecución 3', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoEjecucion4_header', 'Ejecución 4', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoEjecucion5_header', 'Ejecución 5', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_aporteEstrategicoAvance_header', 'Avance Aporte Estratégico', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_list_form_title', 'Consulta General de Seguimiento de Planificación Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_list_form_table_header', 'Consulta General de Seguimiento de Planificación Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_list_form_table_title', 'Consulta General de Seguimiento de Planificación Estratégica', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_planOperativoAnualInstitucional_select_label', 'Seleccione un Periodo Anual', SQ_I18N.nextval);
insert into i18n (version, usuario_creacion, fecha_creacion, fecha_modificacion, usuario_modificacion, campo_configurable, idioma, llave, valor, id_i18n)
values (0,1, sysdate, sysdate,1, NULL, 'es', 'VistaAvancePLP_planOperativoAnualInstitucional_LOV_title', 'Seleccione un Periodo Anual', SQ_I18N.nextval);
DOMAIN JPA: VistaAvancePLP.java
- Ahora debemos crear el domain para acceder a los datos
A PARTIR DE AQUÍ SON LAS FUNCIONES DE LA VERSIÓN 1 CON PARAMETRO PERIODO_ANUAL
FUNCION: OBTENER_METAS_OPE_FUCIONALES_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_METAS_OPE_FUCIONALES_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.META_POA_TABLE_TYPE;
DROP TYPE PPI.META_POA_TYPE;
DROP FUNCTION PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL;
DROP SYNONYM OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato META_POA
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.META_POA_TYPE AS OBJECT (
META_POA NUMBER
);
GRANT EXECUTE ON PPI.META_POA_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato MetaPoaType
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.META_POA_TABLE_TYPE AS TABLE OF META_POA_TYPE;
GRANT EXECUTE ON PPI.META_POA_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN META_POA_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT MPE.META_POA
FROM META_POA_EVALUACION MPE
INNER JOIN META_POA MP ON (MP.ID_META_POA = MPE.META_POA)
INNER JOIN OBJETIVO_POA OP ON (OP.ID_OBJETIVO_POA = MP.OBJETIVO_POA)
INNER JOIN PLAN_OPERATIVO PO ON (PO.ID_PLAN_OPERATIVO = OP.PLAN_OPERATIVO)
INNER JOIN UNIDAD_EJECUTORA UE_PO ON (UE_PO.ID_UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA)
INNER JOIN EVALUACION_OPERATIVA EO ON (EO.PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO)
WHERE PO.PERIODO_ANUAL = periodoAnual
AND PO.ESTADO_FORMULACION_OPE IN (SELECT VALOR FROM PARAMETRO WHERE LLAVE IN ('param_ppi_ppo_estadoFormulacionOpe_aprobado_unSoloNivel', 'param_ppi_ppo_estadoFormulacionOpe_aprobado_unidad_integradora'))
AND PO.TIPO_PLAN_OPERATIVO = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoPlanOperativo_unidad')
AND EO.ESTADO_EVALUACION_POA IN (SELECT VALOR FROM PARAMETRO WHERE LLAVE IN ('param_ppi_ppo_estadoEvaluacionPOA_aprobado_unSoloNivel', 'param_ppi_ppo_estadoEvaluacionPOA_aprobado_unidad_integradora'))
AND MPE.ETAPA_PLAN = EO.ETAPA_PLAN
--AND EO.FECHA_APROBACION = (
-- SELECT
-- MAX(EO.FECHA_APROBACION)
-- FROM
-- EVALUACION_OPERATIVA EO1
-- INNER JOIN PLAN_OPERATIVO PO1 ON (PO1.ID_PLAN_OPERATIVO = EO1.PLAN_OPERATIVO)
-- WHERE
-- PO1.ID_PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO
-- AND PO1.UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA
--)
AND EO.FECHA_APROBACION = (
SELECT
MAX(EO.FECHA_APROBACION)
FROM
EVALUACION_OPERATIVA EO1
INNER JOIN PLAN_OPERATIVO PO1 ON (PO1.ID_PLAN_OPERATIVO = EO1.PLAN_OPERATIVO)
WHERE
PO1.ID_PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO
AND PO1.UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA
)
ORDER BY MPE.META_POA
) LOOP
PIPE ROW (META_POA_TYPE(rec.META_POA));
END LOOP;
RETURN;
END OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS MetaPoa
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(202));
FUNCION: OBTENER_PERIODOS_ANUALES_DISTRIBUCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_PERIODOS_ANUALES_DISTRIBUCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PERIODO_ANUAL_TABLE_TYPE;
DROP TYPE PPI.PERIODO_ANUAL_TYPE;
DROP FUNCTION PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL;
DROP SYNONYM OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato PERIODO_ANUAL_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PERIODO_ANUAL_TYPE AS OBJECT (
PERIODO_ANUAL NUMBER
);
GRANT EXECUTE ON PPI.PERIODO_ANUAL_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PERIODO_ANUAL_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PERIODO_ANUAL_TABLE_TYPE AS TABLE OF PERIODO_ANUAL_TYPE;
GRANT EXECUTE ON PPI.PERIODO_ANUAL_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN PERIODO_ANUAL_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
DISTINCT
APD.PERIODO_ANUAL
FROM
META_POA_APORTE MPAP
INNER JOIN (SELECT *
FROM TABLE(PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(periodoAnual))) METAS_FUNCIONALES on MPAP.META_POA = METAS_FUNCIONALES.META_POA
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO)
INNER JOIN APORTE_PAE_DISTRIBUCION APD ON (APD.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO)
ORDER BY APD.PERIODO_ANUAL
) LOOP
PIPE ROW (PERIODO_ANUAL_TYPE(rec.PERIODO_ANUAL));
END LOOP;
RETURN;
END OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
GRANT EXECUTE ON PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL(202));
FUNCIÓN: OBTENER_APD_X_PERIODDO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_APD_X_PERIODDO_ANUAL
--*******************************************************************************
--*******************************************************************************
--*****************************************************
--COMPONENTE REQUERIDO: AÑO
--*****************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.ANO_TABLE_TYPE;
DROP TYPE PPI.ANO_TYPE;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ANO_TYPE AS OBJECT (
ANO NUMBER(4)
);
GRANT EXECUTE ON PPI.ANO_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato ANO_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ANO_TABLE_TYPE AS TABLE OF ANO_TYPE;
GRANT EXECUTE ON PPI.ANO_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--*****************************************************
--FUNCIÓN: OBTENER_APD_X_PERIODDO_ANUAL
--*****************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.APD_TABLE_TYPE;
DROP TYPE PPI.APD_TYPE;
DROP FUNCTION PPI.OBTENER_APD_X_PERIODO_ANUAL;
DROP SYNONYM OBTENER_APD_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE APD_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
ANNO_1 NUMBER,
ANNO_2 NUMBER,
ANNO_3 NUMBER,
ANNO_4 NUMBER,
ANNO_5 NUMBER
);
GRANT EXECUTE ON PPI.APD_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.APD_TABLE_TYPE AS TABLE OF APD_TYPE;
GRANT EXECUTE ON PPI.APD_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_APD_X_PERIODO_ANUAL(
--periodoAnual: parametro de ingreso
periodoAnual IN NUMBER
)
--RETURN: tabla virtual de tipo APD_TABLE_TYPE
RETURN APD_TABLE_TYPE PIPELINED AS
--***************************************************************
--VARIABLES
--***************************************************************
-- Almacena los años en un arreglo
v_periodos PERIODO_ANUAL_TABLE_TYPE := PERIODO_ANUAL_TABLE_TYPE();
-- Variable para almacenar el año actual
v_periodo PERIODO_ANUAL_TYPE;
-- Almacena los años en un arreglo
v_anos ANO_TABLE_TYPE := ANO_TABLE_TYPE();
-- Variable para almacenar el año actual
v_ano ANO_TYPE;
-- Variable para construir la consulta PIVOT
v_sql CLOB;
-- Variable para almacenar el resultado de la consulta PIVOT
v_result SYS_REFCURSOR;
-- Variables para almacenar los valores dinámicos de las columnas del PIVOT
v_aporte NUMBER;
v_anno_1 NUMBER;
v_anno_2 NUMBER;
v_anno_3 NUMBER;
v_anno_4 NUMBER;
v_anno_5 NUMBER;
BEGIN
--***************************************************************
--OBTENCIÓN DE DATOS
--***************************************************************
-- Ejecutar consulta del ID_PERIODO_ANUAL y ANO para almacenarlos en arreglos para crear el PIVOT
FOR rec IN (SELECT ANO, ID_PERIODO_ANUAL
FROM PERIODO_ANUAL
WHERE ID_PERIODO_ANUAL IN (SELECT PERIODO_ANUAL
FROM TABLE(PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL(periodoAnual)))
ORDER BY ANO)
LOOP
-- Utilizar el constructor del tipo ANO_TYPE
v_ano := ANO_TYPE(rec.ANO);
-- Utilizar el constructor del tipo ANO_TYPE
v_periodo := PERIODO_ANUAL_TYPE(rec.ID_PERIODO_ANUAL);
-- Añadir los resultados al arreglo de años
v_periodos.EXTEND;
v_periodos(v_periodos.LAST) := v_periodo;
-- Añadir los resultados al arreglo de años
v_anos.EXTEND;
v_anos(v_anos.LAST) := v_ano;
END LOOP;
--**************************************************************
--CONSULTA DINÁMICA
--**************************************************************
v_sql := 'SELECT * FROM (SELECT APD.APORTE_ESTRATEGICO, APD.PERIODO_ANUAL, APD.DISTRIBUCION_PORCENTUAL ';
v_sql := v_sql || 'FROM META_POA_APORTE MPAP ';
v_sql := v_sql || 'INNER JOIN (SELECT * FROM TABLE(PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(' || periodoAnual || '))) METAS_FUNCIONAES ';
v_sql := v_sql || 'ON MPAP.META_POA = METAS_FUNCIONAES.META_POA ';
v_sql := v_sql || 'INNER JOIN APORTE_ESTRATEGICO APE ON APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO ';
v_sql := v_sql || 'INNER JOIN APORTE_PAE_DISTRIBUCION APD ON APD.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO ';
v_sql := v_sql || 'WHERE APD.PERIODO_ANUAL IN (SELECT * FROM TABLE(PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL(' || periodoAnual || ')))) ';
v_sql := v_sql || 'PIVOT (MAX(DISTRIBUCION_PORCENTUAL) FOR PERIODO_ANUAL IN (';
FOR i IN 1..v_anos.LAST LOOP
v_sql := v_sql || v_periodos(i).PERIODO_ANUAL || ' as "' || v_anos(i).ANO || '"';
IF i < v_anos.LAST THEN
v_sql := v_sql || ', ';
END IF;
END LOOP;
v_sql := v_sql || ')) ORDER BY APORTE_ESTRATEGICO';
-- Ejecutar la consulta PIVOT
OPEN v_result FOR v_sql;
--**************************************************************
--RECUPERAR Y FORMATEAAR LOS DATOS
--**************************************************************
LOOP
FETCH v_result INTO v_aporte,v_anno_1, v_anno_2, v_anno_3, v_anno_4, v_anno_5;
EXIT WHEN v_result%NOTFOUND;
PIPE ROW(APD_TYPE(v_aporte,v_anno_1, v_anno_2, v_anno_3, v_anno_4, v_anno_5));
END LOOP;
CLOSE v_result;
RETURN;
END OBTENER_APD_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_APD_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_APD_X_PERIODO_ANUAL(202));
FUNCIÓN: OBTENER_PROGRAMACION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_PROGRAMACION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PROGRAMACION_TABLE_TYPE;
DROP TYPE PPI.PROGRAMACION_TYPE;
DROP FUNCTION PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL;
DROP SYNONYM OBTENER_PROGRAMACION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PROGRAMACION_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
DISTRIBUCION_PORCENTUAL NUMBER,
CANTIDAD_APORTES NUMBER,
REPRESENTATIVIDAD NUMBER,
PROGRAMACION NUMBER
);
GRANT EXECUTE ON PPI.PROGRAMACION_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PROGRAMACION_TABLE_TYPE AS TABLE OF PROGRAMACION_TYPE;
GRANT EXECUTE ON PPI.PROGRAMACION_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN PROGRAMACION_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
--DISTINCT
APD.APORTE_ESTRATEGICO APORTE_ESTRATEGICO,
APD.DISTRIBUCION_PORCENTUAL DISTRIBUCION_PORCENTUAL,
CAN_APO.CANTIDAD_APORTES CANTIDAD_APORTES_X_ACCION,
(1 / CAN_APO.CANTIDAD_APORTES) REPRESENTATIVIDAD,
APD.DISTRIBUCION_PORCENTUAL*(1 / CAN_APO.CANTIDAD_APORTES) PROGRAMACION
FROM
META_POA_APORTE MPAP
INNER JOIN (SELECT * FROM TABLE(PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(periodoAnual))) METAS_FUNCIONALES on MPAP.META_POA = METAS_FUNCIONALES.META_POA
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPAP.APORTE_ESTRATEGICO)
INNER JOIN APORTE_PAE_DISTRIBUCION APD ON (APD.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO)
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.ID_ACCION_ESTRATEGICA = APE.ACCION_ESTRATEGICA)
INNER JOIN (SELECT ACCION_ESTRATEGICA, COUNT(*) AS CANTIDAD_APORTES FROM PPI.APORTE_ESTRATEGICO GROUP BY ACCION_ESTRATEGICA) CAN_APO ON CAN_APO.ACCION_ESTRATEGICA = ACE.ID_ACCION_ESTRATEGICA
WHERE APD.PERIODO_ANUAL = periodoAnual
ORDER BY
APD.APORTE_ESTRATEGICO
) LOOP
PIPE ROW(PROGRAMACION_TYPE(REC.APORTE_ESTRATEGICO,REC.DISTRIBUCION_PORCENTUAL,REC.CANTIDAD_APORTES_X_ACCION, REC.REPRESENTATIVIDAD, REC.PROGRAMACION));
END LOOP;
RETURN;
END OBTENER_PROGRAMACION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL(202));
FUNCIÓN: OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA
--*******************************************************************************
--*******************************************************************************
CREATE OR REPLACE FUNCTION PPI.OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA(
periodoAnual IN NUMBER
)
RETURN NUMBER
IS
v_id_etapa_plan NUMBER;
BEGIN
SELECT
EP.ID_ETAPA_PLAN INTO v_id_etapa_plan
FROM ETAPA_PLAN EP
WHERE
EP.TIPO_ETAPA = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoEtapa_evaluacion')
AND EP.PERIODO_ANUAL = periodoAnual
AND EP.TIPO_PLAN_OPERATIVO = (SELECT VALOR FROM PARAMETRO WHERE LLAVE = 'param_ppi_ppo_tipoPlanOperativo_unidad')
AND EP.FECHA_FINAL_EVALUACION <= TRUNC(SYSDATE)
ORDER BY
EP.FECHA_FINAL_EVALUACION DESC
FETCH FIRST 1 ROW ONLY;
RETURN v_id_etapa_plan;
END OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA;
--PROBAR CONSULTA
SELECT PPI.OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA(:periodoAnual) AS ULTIMA_ETAPA_PLAN_EVALUACION FROM DUAL;
FUNCIÓN: OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.PROMEDIO_AVANCE_APORTE_TABLE_TYPE;
DROP TYPE PPI.PROMEDIO_AVANCE_APORTE_TYPE;
DROP FUNCTION PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato PERIODO_ANUAL_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PROMEDIO_AVANCE_APORTE_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
PROMEDIO NUMBER,
ETAPA_PLAN NUMBER
);
GRANT EXECUTE ON PPI.PROMEDIO_AVANCE_APORTE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PERIODO_ANUAL_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.PROMEDIO_AVANCE_APORTE_TABLE_TYPE AS TABLE OF PROMEDIO_AVANCE_APORTE_TYPE;
GRANT EXECUTE ON PPI.PROMEDIO_AVANCE_APORTE_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN PROMEDIO_AVANCE_APORTE_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
MPA.APORTE_ESTRATEGICO,
NVL(AVG(MPE.EJECUCION),0) PROMEDIO,
MPE.ETAPA_PLAN
FROM
META_POA_APORTE MPA
INNER JOIN (
SELECT * FROM TABLE(
PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(periodoAnual)
)
) METAS_FUNCIONALES ON MPA.META_POA = METAS_FUNCIONALES.META_POA
INNER JOIN META_POA_EVALUACION MPE ON (MPE.META_POA = MPA.META_POA)
INNER JOIN ETAPA_PLAN EP ON (EP.ID_ETAPA_PLAN = MPE.ETAPA_PLAN)
WHERE
EP.PERIODO_ANUAL = periodoAnual
AND MPE.ETAPA_PLAN = PPI.OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA(periodoAnual)
GROUP BY MPA.APORTE_ESTRATEGICO, MPE.ETAPA_PLAN
ORDER BY
MPA.APORTE_ESTRATEGICO
)
LOOP
PIPE ROW (PROMEDIO_AVANCE_APORTE_TYPE(rec.APORTE_ESTRATEGICO,rec.PROMEDIO, rec.ETAPA_PLAN));
END LOOP;
DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
GRANT EXECUTE ON PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL(:periodoAnual));
FUNCIÓN: OBTENER_EJECUCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_EJECUCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.EJECUCION_TABLE_TYPE;
DROP TYPE PPI.EJECUCION_TYPE;
DROP FUNCTION PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.EJECUCION_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
PROGRAMACION NUMBER,
PROMEDIO NUMBER,
ETAPA_PLAN NUMBER,
EJECUCION NUMBER
);
GRANT EXECUTE ON PPI.EJECUCION_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.EJECUCION_TABLE_TYPE AS TABLE OF EJECUCION_TYPE;
GRANT EXECUTE ON PPI.EJECUCION_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN EJECUCION_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
PROGRAMACION.APORTE_ESTRATEGICO APORTE_ESTRATEGICO,
PROGRAMACION.PROGRAMACION PROGRAMACION,
PROMEDIO.PROMEDIO PROMEDIO,
PROMEDIO.ETAPA_PLAN ETAPA_PLAN,
((PROGRAMACION.PROGRAMACION*PROMEDIO.PROMEDIO)/100) EJECUCION
FROM TABLE(PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL(periodoAnual)) PROGRAMACION
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL(periodoAnual))
) PROMEDIO ON PROGRAMACION.APORTE_ESTRATEGICO = PROMEDIO.APORTE_ESTRATEGICO
WHERE
PROMEDIO.ETAPA_PLAN = PPI.OBTENER_ULTIMA_ETAPA_PLAN_EVALUACION_FINALIZADA(periodoAnual)
ORDER BY
PROGRAMACION.APORTE_ESTRATEGICO
)
LOOP
PIPE ROW (EJECUCION_TYPE(rec.APORTE_ESTRATEGICO,rec.PROGRAMACION, rec.PROMEDIO,rec.ETAPA_PLAN,rec.EJECUCION));
END LOOP;
DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END OBTENER_EJECUCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL(:periodoAnual));
FUNCIÓN: OBTENER_ACUMULADO_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_ACUMULADO_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.ACUMULADO_TABLE_TYPE;
DROP TYPE PPI.ACUMULADO_TYPE;
DROP FUNCTION PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_TYPE AS OBJECT (
APORTE_ESTRATEGICO NUMBER,
ACUMULADO NUMBER
);
GRANT EXECUTE ON PPI.ACUMULADO_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato ACUMULADO_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_TABLE_TYPE AS TABLE OF ACUMULADO_TYPE;
GRANT EXECUTE ON PPI.ACUMULADO_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL(
--periodoAnual: parametro de ingreso
periodoAnual IN NUMBER
)
--RETURN: tabla virtual de tipo APD_TABLE_TYPE
RETURN ACUMULADO_TABLE_TYPE PIPELINED AS
--***************************************************************
--VARIABLES
--***************************************************************
-- Almacena los años en un arreglo
v_periodos PERIODO_ANUAL_TABLE_TYPE := PERIODO_ANUAL_TABLE_TYPE();
-- Variable para almacenar el año actual
v_periodo PERIODO_ANUAL_TYPE;
-- Variable para construir la consulta PIVOT
v_sql CLOB;
-- Variable para almacenar el resultado de la consulta PIVOT
v_result SYS_REFCURSOR;
-- Variables para almacenar los valores dinámicos de las columnas del PIVOT
v_aporte NUMBER;
v_acumulado NUMBER;
BEGIN
--***************************************************************
--OBTENCIÓN DE DATOS
--***************************************************************
-- Ejecutar consulta del ID_PERIODO_ANUAL y ANO para almacenarlos en arreglos para crear el PIVOT
FOR rec IN (SELECT PERIODO_ANUAL FROM TABLE(PPI.OBTENER_PERIODO_ANUAL_DISTRIBUCION_X_PERIODO_ANUAL(periodoAnual)) ORDER BY PERIODO_ANUAL)
LOOP
-- Utilizar el constructor del tipo ANO_TYPE
v_periodo := PERIODO_ANUAL_TYPE(rec.PERIODO_ANUAL);
-- Añadir los resultados al arreglo de años
v_periodos.EXTEND;
v_periodos(v_periodos.LAST) := v_periodo;
END LOOP;
--**************************************************************
--CONSULTA DINÁMICA
--**************************************************************
v_sql := 'SELECT ';
--FOR i IN 1..v_periodos.LAST LOOP
-- v_sql := v_sql || 'NVL(EJECUCION_'|| v_periodos(i).PERIODO_ANUAL || '.EJECUCION,0) EJECUCION_' || v_periodos(i).PERIODO_ANUAL || ',';
--END LOOP;
v_sql := v_sql || 'EJECUCION_' || v_periodos(1).PERIODO_ANUAL || '.APORTE_ESTRATEGICO,';
v_sql := v_sql || '(';
FOR i IN 1..v_periodos.LAST LOOP
v_sql := v_sql || 'NVL(EJECUCION_'|| v_periodos(i).PERIODO_ANUAL || '.EJECUCION,0) ';
IF i < v_periodos.LAST THEN
v_sql := v_sql || ' + ';
END IF;
END LOOP;
v_sql := v_sql || ') AS ACUMULADO ';
v_sql := v_sql || 'FROM TABLE(PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL(' || v_periodos(1).PERIODO_ANUAL || ')) EJECUCION_' || v_periodos(1).PERIODO_ANUAL || ' ';
FOR i IN 2..v_periodos.LAST LOOP
v_sql := v_sql || 'LEFT JOIN ';
v_sql := v_sql || '( ';
v_sql := v_sql || 'SELECT ';
v_sql := v_sql || 'APORTE_ESTRATEGICO, ';
v_sql := v_sql || 'EJECUCION ';
v_sql := v_sql || 'FROM TABLE(PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL(' || v_periodos(i).PERIODO_ANUAL || '))';
v_sql := v_sql || ') EJECUCION_' || v_periodos(i).PERIODO_ANUAL || ' ON EJECUCION_' || v_periodos(1).PERIODO_ANUAL || '.APORTE_ESTRATEGICO = EJECUCION_' || v_periodos(i).PERIODO_ANUAL || '.APORTE_ESTRATEGICO ';
v_sql := v_sql || ' ';
END LOOP;
v_sql := v_sql || 'ORDER BY EJECUCION_'||v_periodos(1).PERIODO_ANUAL ||'.APORTE_ESTRATEGICO';
-- Ejecutar la consulta PIVOT
OPEN v_result FOR v_sql;
--**************************************************************
--RECUPERAR Y FORMATEAAR LOS DATOS
--**************************************************************
LOOP
FETCH v_result INTO v_aporte,v_acumulado;
EXIT WHEN v_result%NOTFOUND;
PIPE ROW(ACUMULADO_TYPE(v_aporte,v_acumulado));
END LOOP;
CLOSE v_result;
RETURN;
END OBTENER_ACUMULADO_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL(:periodoAnual));
FUNCIÓN: OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.ACUMULADO_ACCION_TABLE_TYPE;
DROP TYPE PPI.ACUMULADO_ACCION_TYPE;
DROP FUNCTION PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_ACCION_TYPE AS OBJECT (
ACCION_ESTRATEGICA NUMBER,
ACUMULADO_ACCION NUMBER
);
GRANT EXECUTE ON PPI.ACUMULADO_ACCION_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_ACCION_TABLE_TYPE AS TABLE OF ACUMULADO_ACCION_TYPE;
GRANT EXECUTE ON PPI.ACUMULADO_ACCION_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN ACUMULADO_ACCION_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
ACE.ID_ACCION_ESTRATEGICA,
SUM(ACUMULADO.ACUMULADO) AS ACUMULADO_X_ACCION
FROM
ACCION_ESTRATEGICA ACE
INNER JOIN
APORTE_ESTRATEGICO APE ON (APE.ACCION_ESTRATEGICA = ACE.ID_ACCION_ESTRATEGICA)
-- ACUMULADO
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL(periodoAnual))
) ACUMULADO ON APE.ID_APORTE_ESTRATEGICO = ACUMULADO.APORTE_ESTRATEGICO
GROUP BY
ACE.ID_ACCION_ESTRATEGICA
ORDER BY
ACE.ID_ACCION_ESTRATEGICA
)
LOOP
PIPE ROW (ACUMULADO_ACCION_TYPE(rec.ID_ACCION_ESTRATEGICA,rec.ACUMULADO_X_ACCION));
END LOOP;
DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL(:periodoAnual));
FUNCIÓN: OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.ACUMULADO_METAPMP_TABLE_TYPE;
DROP TYPE PPI.ACUMULADO_METAPMP_TYPE;
DROP FUNCTION PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_METAPMP_TYPE AS OBJECT (
META_PMP NUMBER,
ACUMULADO_METAPMP NUMBER
);
GRANT EXECUTE ON PPI.ACUMULADO_METAPMP_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_METAPMP_TABLE_TYPE AS TABLE OF ACUMULADO_METAPMP_TYPE;
GRANT EXECUTE ON PPI.ACUMULADO_METAPMP_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN ACUMULADO_METAPMP_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
MPMP.ID_META_PMP,
NVL(AVG(ACUMULADO_ACCION.ACUMULADO_ACCION),0) AS ACUMULADO_X_META
FROM
META_PMP MPMP
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.META_PMP = MPMP.ID_META_PMP)
--ACUMULADO ACCION
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL(periodoAnual))
) ACUMULADO_ACCION ON ACE.ID_ACCION_ESTRATEGICA = ACUMULADO_ACCION.ACCION_ESTRATEGICA
GROUP BY
MPMP.ID_META_PMP
ORDER BY
MPMP.ID_META_PMP
)
LOOP
PIPE ROW (ACUMULADO_METAPMP_TYPE(rec.ID_META_PMP,rec.ACUMULADO_X_META));
END LOOP;
DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL(:periodoAnual));
FUNCIÓN: OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
-- FUNCIÓN: OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL
--*******************************************************************************
--*******************************************************************************
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
-- PASO 0: ELIMINACIÓN DE DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
DROP TYPE PPI.ACUMULADO_PRIORIDAD_TABLE_TYPE;
DROP TYPE PPI.ACUMULADO_PRIORIDAD_TYPE;
DROP FUNCTION PPI.OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 01: Crear TIPO de tipo de dato APD_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_PRIORIDAD_TYPE AS OBJECT (
PRIORIDAD_ESTRATEGICA_PMP NUMBER,
ACUMULADO_PRIORIDAD NUMBER
);
GRANT EXECUTE ON PPI.ACUMULADO_PRIORIDAD_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 02: Crear TABLA de tipo de dato PROGRAMACION_TYPE
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE TYPE PPI.ACUMULADO_PRIORIDAD_TABLE_TYPE AS TABLE OF ACUMULADO_PRIORIDAD_TYPE;
GRANT EXECUTE ON PPI.ACUMULADO_PRIORIDAD_TABLE_TYPE TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 03: Crear FUNCIÓN
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
CREATE OR REPLACE FUNCTION PPI.OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL(
periodoAnual IN NUMBER
)
RETURN ACUMULADO_PRIORIDAD_TABLE_TYPE PIPELINED AS
BEGIN
FOR rec IN (
SELECT
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP,
NVL(AVG(ACUMULADO_METAPMP.ACUMULADO_METAPMP),0) AS ACUMULADO_PRIORIDAD
FROM
PRIORIDAD_ESTRATEGICA_PMP PEPMP
INNER JOIN DETALLE_PMP DPMP ON (DPMP.PRIORIDAD_ESTRATEGICA_PMP = PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP)
INNER JOIN META_PMP MPMP ON (MPMP.DETALLE_PMP = DPMP.ID_DETALLE_PMP)
--ACUMULADO METAPMP
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL(periodoAnual))
) ACUMULADO_METAPMP ON MPMP.ID_META_PMP = ACUMULADO_METAPMP.META_PMP
GROUP BY
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP
ORDER BY
PEPMP.ID_PRIORIDAD_ESTRATEGICA_PMP
)
LOOP
PIPE ROW (ACUMULADO_PRIORIDAD_TYPE(rec.ID_PRIORIDAD_ESTRATEGICA_PMP,rec.ACUMULADO_PRIORIDAD));
END LOOP;
DBMS_OUTPUT.PUT_LINE('DEBUG: periodoAnual: ' || periodoAnual);
RETURN;
END OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 04: GRANTS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--***********************************************
-- GRANT'S
--***********************************************
GRANT EXECUTE ON PPI.OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL TO WWW_SIGESA,ANALISTA, ANALISTA_SIGESA;
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
--PASO 05: CONSULTAR DATOS
--+++++++++++++++++++++++++++++++++++++++++++++++++++++
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL(:periodoAnual));
CONSULTA DE LA VISTA
- Ahora que tenemos las funciones creadas vamos a crear la consulta
- O descargar el archivo: aquí
- NOTA IMPORTANTE: las vista no llevan parámetros obtienen todos los datos a nivel de código se filtran
--************************************************************
-- FUNCION: Obtener los datos de la vista solicitada
-- VERSION: 1.0.10
--************************************************************
SELECT
DISTINCT
EJE_PLP.CODIGO EJE_PLP_CODIGO,
EJE_PLP.DESCRIPCION EJE_PLP_DESCRIPCION,
OBJ_PLP.CODIGO OBJ_PLP_CODIGO,
OBJ_PLP.DESCRIPCION OBJ_PLP_DESCRIPCION,
EJE_TRA.CODIGO EJE_TRA_CODIGO,
EJE_TRA.DESCRIPCION EJE_TRA_DESCRIPCION,
PRI_PMP.CODIGO PRI_PMP_CODIGO,
PRI_PMP.DESCRIPCION PRI_PMP_DESCRIPCION,
ACUMULADO_PRIORIDAD.ACUMULADO_PRIORIDAD ACUMULADO_PRIORIDAD,
OBJ_PMP.CODIGO OBJ_PMP_CODIGO,
OBJ_PMP.DESCRIPCION OBJ_PMP_DESCRIPCION,
MPMP.CODIGO MPMP_CODIGO,
MPMP.DESCRIPCION MPMP_DESCRIPCION,
ACUMULADO_METAPMP.ACUMULADO_METAPMP ACUMULADO_METAPMP,
AAU.NOMBRE AMBITO_ACCION_UNIVERITARIA,
UE_EM.NOMBRE ENCARGADO_MONITOERO,
EPES.CODIGO EPES_CODIGO,
EPES.NOMBRE EPES_NOMBRE,
TEPES.NOMBRE TEPES_NOMBRE,
OPDS.CODIGO OPDS_CODIGO,
OPDS.NOMBRE OPDS_NOMBRE,
UE_PACE.NOMBRE UE_PACE_NOMBRE,
ACE.CODIGO ACE_CODIGO,
ACE.DESCRIPCION ACE_DESCRIPCION,
ACUMULADO_ACCION.ACUMULADO_ACCION ACUMULADO_ACCION,
UE_PAPE.NOMBRE UE_PAPE_NOMBRE,
APE.CODIGO APE_CODIGO,
APE.DESCRIPCION APE_DESCRIPCION,
APE.CUANTIFICACION CUANTIFICACION,
APE.LINEA_BASE LINEA_BASE,
FR.NOMBRE FUENTE_RECURSO,
APE.JORNADA JORNADA,
APD.ANNO_1 DISTRIBUCION_1,
APD.ANNO_2 DISTRIBUCION_2,
APD.ANNO_3 DISTRIBUCION_3,
APD.ANNO_4 DISTRIBUCION_4,
APD.ANNO_5 DISTRIBUCION_5,
PROGRAMACION.CANTIDAD_APORTES CANTIDAD_APORTES,
PROGRAMACION.REPRESENTATIVIDAD REPRESENTATIVIDAD,
PROGRAMACION.PROGRAMACION PROGRAMACION,
PROMEDIO.PROMEDIO PROMEDIO,
EJECUCION.EJECUCION EJECUCION,
ACUMULADO.ACUMULADO ACUMULADO_APORTE
FROM
META_POA_EVALUACION MPE
INNER JOIN META_POA MP ON (MP.ID_META_POA = MPE.META_POA)
INNER JOIN OBJETIVO_POA OP ON (OP.ID_OBJETIVO_POA = MP.OBJETIVO_POA)
INNER JOIN PLAN_OPERATIVO PO ON (PO.ID_PLAN_OPERATIVO = OP.PLAN_OPERATIVO)
INNER JOIN UNIDAD_EJECUTORA UE_PO ON (UE_PO.ID_UNIDAD_EJECUTORA = PO.UNIDAD_EJECUTORA)
INNER JOIN EVALUACION_OPERATIVA EO ON (EO.PLAN_OPERATIVO = PO.ID_PLAN_OPERATIVO)
INNER JOIN META_POA_APORTE MPA ON (MPA.META_POA = MP.ID_META_POA)
INNER JOIN APORTE_ESTRATEGICO APE ON (APE.ID_APORTE_ESTRATEGICO = MPA.APORTE_ESTRATEGICO)
INNER JOIN PLAN_APORTE_ESTRATEGICO PAPE ON (PAPE.ID_PLAN_APORTE_ESTRATEGICO = APE.PLAN_APORTE_ESTRATEGICO)
INNER JOIN UNIDAD_EJECUTORA UE_PAPE ON (UE_PAPE.ID_UNIDAD_EJECUTORA = PAPE.UNIDAD_EJECUTORA)
LEFT JOIN APORTE_PAE_FUENTE_RECURSO APAEFR ON (APAEFR.APORTE_ESTRATEGICO = APE.ID_APORTE_ESTRATEGICO) --FALTAN
LEFT JOIN FUENTE_RECURSO FR ON (FR.ID_FUENTE_RECURSO = APAEFR.FUENTE_RECURSO) --FALTAN
INNER JOIN ACCION_ESTRATEGICA ACE ON (ACE.ID_ACCION_ESTRATEGICA = APE.ACCION_ESTRATEGICA)
INNER JOIN PLAN_ACCION_ESTRATEGICA PACE ON (PACE.ID_PLAN_ACCION_ESTRATEGICA = ACE.PLAN_ACCION_ESTRATEGICA)
INNER JOIN UNIDAD_EJECUTORA UE_PACE ON (UE_PACE.ID_UNIDAD_EJECUTORA = PACE.UNIDAD_EJECUTORA)
INNER JOIN META_PMP MPMP ON (MPMP.ID_META_PMP = ACE.META_PMP)
INNER JOIN AMBITO_ACCION_UNIVERSITARIA AAU ON (AAU.ID_AMBITO_ACCION_UNIVERSITARIA = MPMP.AMBITO_ACCION_UNIVERSITARIA)
INNER JOIN ENCARGADO_MONITOREO EM ON (EM.ID_ENCARGADO_MONITOREO = MPMP.ENCARGADO_MONITOREO)
INNER JOIN UNIDAD_EJECUTORA UE_EM ON (UE_EM.ID_UNIDAD_EJECUTORA = EM.UNIDAD_EJECUTORA)
LEFT JOIN META_PMP_EJE_PES MPEP ON (MPEP.META_PMP = MPMP.ID_META_PMP) --VACIA
LEFT JOIN EJE_PES EPES ON (EPES.ID_EJE_PES = MPEP.EJE_PES)
LEFT JOIN TIPO_EJE_PES TEPES ON (TEPES.ID_TIPO_EJE_PES = EPES.TIPO_EJE_PES)
LEFT JOIN META_PMP_OBJETIVO_PDS MPOPDS ON (MPOPDS.META_PMP = MPMP.ID_META_PMP) --VACIA
LEFT JOIN OBJETIVO_PDS OPDS ON (OPDS.ID_OBJETIVO_PDS = MPOPDS.OBJETIVO_PDS)
INNER JOIN DETALLE_PMP DET_PMP ON (DET_PMP.ID_DETALLE_PMP = MPMP.DETALLE_PMP)
INNER JOIN PRIORIDAD_ESTRATEGICA_PMP PRI_PMP ON (PRI_PMP.ID_PRIORIDAD_ESTRATEGICA_PMP = DET_PMP.PRIORIDAD_ESTRATEGICA_PMP)
INNER JOIN OBJETIVO_ESTRATEGICO_PMP OBJ_PMP ON (OBJ_PMP.ID_OBJETIVO_ESTRATEGICO_PMP = DET_PMP.OBJETIVO_ESTRATEGICO_PMP)
INNER JOIN EJE_ESTRATEGICO_PLP EJE_PLP ON (EJE_PLP.ID_EJE_ESTRATEGICO_PLP = DET_PMP.EJE_ESTRATEGICO_LARGO_PLAZO)
INNER JOIN DETALLE_PLP DET_PLP ON (DET_PLP.EJE_ESTRATEGICO_PLP = EJE_PLP.ID_EJE_ESTRATEGICO_PLP)
INNER JOIN OBJETIVO_ESTRATEGICO_PLP OBJ_PLP ON (OBJ_PLP.ID_OBJETIVO_ESTRATEGICO_PLP = DET_PLP.OBJETIVO_ESTRATEGICO_PLP)
INNER JOIN DETALLE_PLP_EJE_TRANSVERSAL DET_EJE_TRA ON (DET_EJE_TRA.DETALLE_PLP = DET_PLP.ID_DETALLE_PLP)
LEFT JOIN EJE_TRANSVERSAL_PLP EJE_TRA ON (EJE_TRA.ID_EJE_TRANSVERSAL_PLP = DET_EJE_TRA.EJE_TRANSVERSAL_PLP) --VACIA
INNER JOIN PLAN_LARGO_PLAZO PLP ON (PLP.ID_PLAN_LARGO_PLAZO = DET_PLP.PLAN_LARGO_PLAZO)
--METAS FUNCIONALES
INNER JOIN (SELECT *
FROM TABLE(PPI.OBTENER_METAS_OPE_FUNCIONALES_X_PERIODO_ANUAL(:periodoAnual))
) METAS_FUNCIONALES on MPE.META_POA = METAS_FUNCIONALES.META_POA
-- DISTRIBUCION PORCENTUAL
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_APD_X_PERIODO_ANUAL(:periodoAnual))
) APD ON APE.ID_APORTE_ESTRATEGICO = APD.APORTE_ESTRATEGICO
-- PROGRAMACION
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_PROGRAMACION_X_PERIODO_ANUAL(:periodoAnual))
) PROGRAMACION ON APE.ID_APORTE_ESTRATEGICO = PROGRAMACION.APORTE_ESTRATEGICO
--***************************************
-- A PARTIR DE SE REQUIERE LA ETAPA_PLAN
--***************************************
-- PROMEDIO
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_PROMEDIO_AVANCE_APORTE_X_PERIODO_ANUAL(:periodoAnual))
) PROMEDIO ON APE.ID_APORTE_ESTRATEGICO = PROMEDIO.APORTE_ESTRATEGICO AND MPE.ETAPA_PLAN = PROMEDIO.ETAPA_PLAN
--EJECUCION
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_EJECUCION_X_PERIODO_ANUAL(:periodoAnual))
) EJECUCION ON APE.ID_APORTE_ESTRATEGICO = EJECUCION.APORTE_ESTRATEGICO AND MPE.ETAPA_PLAN = EJECUCION.ETAPA_PLAN
--ACUMULADO APORTE
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_X_PERIODO_ANUAL(:periodoAnual))
) ACUMULADO ON APE.ID_APORTE_ESTRATEGICO = ACUMULADO.APORTE_ESTRATEGICO
--ACUMULADO ACCION
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_ACCION_X_PERIODO_ANUAL(:periodoAnual))
) ACUMULADO_ACCION ON ACE.ID_ACCION_ESTRATEGICA = ACUMULADO_ACCION.ACCION_ESTRATEGICA
--ACUMULADO METAPMP
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_METAPMP_X_PERIODO_ANUAL(:periodoAnual))
) ACUMULADO_METAPMP ON MPMP.ID_META_PMP = ACUMULADO_METAPMP.META_PMP
--ACUMULADO PRIORIDAD
INNER JOIN (
SELECT * FROM TABLE(PPI.OBTENER_ACUMULADO_PRIORIDAD_X_PERIODO_ANUAL(:periodoAnual))
) ACUMULADO_PRIORIDAD ON ID_PRIORIDAD_ESTRATEGICA_PMP = ACUMULADO_PRIORIDAD.PRIORIDAD_ESTRATEGICA_PMP
WHERE
PO.PERIODO_ANUAL = :periodoAnual
AND MPE.ETAPA_PLAN = EO.ETAPA_PLAN
ORDER BY
EJE_PLP.CODIGO,
OBJ_PLP.CODIGO,
EJE_TRA.CODIGO,
PRI_PMP.CODIGO,
OBJ_PMP.CODIGO,
MPMP.CODIGO,
AAU.NOMBRE,
UE_EM.NOMBRE,
EPES.CODIGO,
OPDS.CODIGO,
UE_PACE.NOMBRE,
ACE.CODIGO,
UE_PAPE.NOMBRE,
APE.CODIGO
;