return: text lang: plpgsql parameters: p0: type: bigint name: i_rapport_id src: | DECLARE BEGIN DROP TABLE IF EXISTS w_VP_rapports_rubriques; CREATE TEMP TABLE w_VP_rapports_rubriques AS SELECT t_rapports_rubriques.*, array_cat(CASE WHEN erase_rapport_indicateur_condition IS DISTINCT FROM '1' THEN t_rapports.rapport_indicateur_condition_id ELSE NULL END,indicateur_condition_id) AS vp_indicateur_condition_id FROM rh.t_rapports_rubriques JOIN rh.t_rapports ON rapport_id = t_rapports.oid WHERE rapport_id = i_rapport_id ; DROP TABLE IF EXISTS w_VP_indicateurs; CREATE TEMP TABLE w_VP_indicateurs AS SELECT t_indicateurs_target.*, numero_rubrique AS vp_numero_rubrique, vp_indicateur_condition_id AS indicateur_condition_id, ''::text AS indicateur_condition_where, row_number() OVER(ORDER BY numero_rubrique, indicateur_id) AS vp_oid FROM rh.t_indicateurs JOIN rh.t_indicateurs t_indicateurs_target ON ( t_indicateurs.total_function = '*CALC' AND t_indicateurs_target.oid = ANY( ARRAY[ t_indicateurs.indicateur_associe_1_id, t_indicateurs.indicateur_associe_2_id, t_indicateurs.indicateur_associe_3_id, t_indicateurs.indicateur_associe_4_id, t_indicateurs.indicateur_associe_5_id, t_indicateurs.indicateur_associe_6_id, t_indicateurs.indicateur_associe_7_id, t_indicateurs.indicateur_associe_8_id, t_indicateurs.indicateur_associe_9_id, t_indicateurs.indicateur_associe_10_id ]) OR t_indicateurs.oid = t_indicateurs_target.oid ) JOIN w_VP_rapports_rubriques t_rapports_rubriques ON t_indicateurs.oid = t_rapports_rubriques.indicateur_id ORDER BY numero_rubrique, indicateur_id ; UPDATE w_VP_rapports_rubriques SET indicateur_id = w_VP_indicateurs.vp_oid FROM w_VP_indicateurs WHERE w_VP_rapports_rubriques.numero_rubrique = w_VP_indicateurs.vp_numero_rubrique AND w_VP_rapports_rubriques.indicateur_id = w_VP_indicateurs.oid ; UPDATE w_VP_indicateurs SET indicateur_associe_1_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_1_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_2_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_2_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_3_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_3_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_4_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_4_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_5_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_5_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_6_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_6_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_7_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_7_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_8_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_8_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_9_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_9_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET indicateur_associe_10_id = w_VP_indicateurs_f.vp_oid FROM w_VP_indicateurs w_VP_indicateurs_f WHERE w_VP_indicateurs.indicateur_associe_10_id = w_VP_indicateurs_f.oid AND w_VP_indicateurs.vp_numero_rubrique = w_VP_indicateurs_f.vp_numero_rubrique ; UPDATE w_VP_indicateurs SET oid = vp_oid ; UPDATE w_VP_indicateurs SET indicateur_condition_where = condition_where FROM ( SELECT w_VP_indicateurs.oid, array_to_string(array_agg('('||COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where)||')'),' AND ') AS condition_where FROM w_VP_indicateurs JOIN rh.t_indicateur_condition ON t_indicateur_condition.oid = ANY(indicateur_condition_id) JOIN rh.t_indicateur_condition_table ON t_indicateur_condition_table.indicateur_condition_id = t_indicateur_condition.oid AND t_indicateur_condition_table.table_name = '' LEFT JOIN rh.t_indicateur_condition_table t_indicateur_condition_table_spec ON t_indicateur_condition_table_spec.indicateur_condition_id = t_indicateur_condition.oid AND t_indicateur_condition_table_spec.table_name = w_VP_indicateurs.table_name WHERE COALESCE(t_indicateur_condition_table_spec.check_where,t_indicateur_condition_table.check_where) <> '' GROUP BY 1 ) subview WHERE w_VP_indicateurs.oid = subview.oid ; UPDATE w_VP_indicateurs SET column_name = CASE WHEN column_name ILIKE 'DISTINCT%' THEN 'DISTINCT ' ELSE '' END || 'CASE WHEN ' || indicateur_condition_where || ' THEN ' || CASE WHEN column_name ILIKE 'DISTINCT%' THEN substr(column_name,9) ELSE column_name END || ' ELSE ' || CASE WHEN total_function = 'SUM' THEN '0' ELSE 'NULL' END || ' END' WHERE indicateur_condition_where <> '' AND total_function In('SUM','COUNT') ; RETURN 'OK'; END;