return: text lang: plpgsql parameters: p0: type: text name: i_table src: | DECLARE w_table TEXT; result TEXT; BEGIN -- i_table = -- Table à mettre à jour, si '*NONE', ne met à jour que les codes et libellés w_table = i_table; IF w_table = '' THEN w_table = 'activite.p_factures_lignes_c'; END IF; IF w_table <> '*NONE' THEN BEGIN RAISE NOTICE '%' , 'Creation nouvelles rubriques'; EXECUTE ' INSERT INTO activite.t_rubrique_facture_c (rubrique_facturation_id,rubrique_comptabilisation_id, prestation_id, compte_produit_id) SELECT p_factures_lignes_c.rubrique_facturation_id, p_factures_lignes_c.rubrique_comptabilisation_id, p_factures_lignes_c.prestation_id, p_factures_lignes_c.compte_produit_id FROM ' || w_table || ' p_factures_lignes_c LEFT JOIN activite.t_rubrique_facture_c ON (p_factures_lignes_c.rubrique_facturation_id = t_rubrique_facture_c.rubrique_facturation_id AND p_factures_lignes_c.rubrique_comptabilisation_id = t_rubrique_facture_c.rubrique_comptabilisation_id AND p_factures_lignes_c.prestation_id = t_rubrique_facture_c.prestation_id AND p_factures_lignes_c.compte_produit_id = t_rubrique_facture_c.compte_produit_id) WHERE t_rubrique_facture_c.oid IS NULL GROUP BY 1,2,3,4 ORDER BY 1,2,3,4'; EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'1'; END; RAISE NOTICE '%' , 'Mise a jour lignes de factures'; -- Création colonne BEGIN IF NOT EXISTS (SELECT CASE WHEN table_schema NOT LIKE 'pg_temp%' THEN table_schema||'.' ELSE '' END ||table_name FROM information_schema.columns WHERE CASE WHEN table_schema NOT LIKE 'pg_temp%' THEN table_schema||'.' ELSE '' END ||table_name ILIKE w_table AND column_name = 'rubrique_facture_id') THEN EXECUTE ' ALTER TABLE ' || w_table || ' ADD COLUMN rubrique_facture_id bigint; ALTER TABLE ' || w_table || ' ALTER COLUMN rubrique_facture_id SET DEFAULT 0'; END IF; EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'2'; END; -- Création index -- (REINDEX Désactivé) EXECUTE ' REINDEX TABLE ' || w_table; BEGIN IF NOT EXISTS (SELECT CASE WHEN schemaname NOT LIKE 'pg_temp%' THEN schemaname||'.' ELSE '' END ||tablename from pg_indexes WHERE (CASE WHEN schemaname NOT LIKE 'pg_temp%' THEN schemaname||'.' ELSE '' END ||tablename) ILIKE w_table AND indexdef ILIKE '%rubrique_facturation_id%') THEN EXECUTE ' CREATE INDEX i_' || w_table || '_rubrique_facturation_id ON ' || w_table || ' USING btree (rubrique_facturation_id)'; END IF; EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'3'; END; -- Mise à jour nouvelle zone BEGIN EXECUTE ' UPDATE ' || w_table || ' p_factures_lignes_c SET rubrique_facture_id = t_rubrique_facture_c.oid FROM activite.t_rubrique_facture_c WHERE p_factures_lignes_c.rubrique_facturation_id = t_rubrique_facture_c.rubrique_facturation_id AND p_factures_lignes_c.rubrique_comptabilisation_id = t_rubrique_facture_c.rubrique_comptabilisation_id AND p_factures_lignes_c.prestation_id = t_rubrique_facture_c.prestation_id AND p_factures_lignes_c.compte_produit_id = t_rubrique_facture_c.compte_produit_id AND rubrique_facture_id IS DISTINCT FROM t_rubrique_facture_c.oid'; EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'4'; END; EXECUTE ' ANALYSE ' || w_table; END IF; RAISE NOTICE '%' , 'Mise a jour libelles'; BEGIN UPDATE activite.t_rubrique_facture_c SET rubrique_facturation_code = t_rubriques_facturation.code, rubrique_facturation_texte = t_rubriques_facturation.texte_court, rubrique_facturation_section_id = t_rubriques_facturation.section_id, rubrique_facturation_section_code = t_rubriques_facturation.section_code, rubrique_facturation_section_texte = t_rubriques_facturation.section_texte FROM activite.t_rubriques_facturation WHERE rubrique_facturation_id = t_rubriques_facturation.oid AND ( rubrique_facturation_code::text IS DISTINCT FROM t_rubriques_facturation.code::text OR rubrique_facturation_texte::text IS DISTINCT FROM t_rubriques_facturation.texte_court::text OR rubrique_facturation_section_id::bigint[] IS DISTINCT FROM t_rubriques_facturation.section_id::bigint[] OR rubrique_facturation_section_code::text[] IS DISTINCT FROM t_rubriques_facturation.section_code::text[] OR rubrique_facturation_section_texte::text[] IS DISTINCT FROM t_rubriques_facturation.section_texte::text[] ); EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'5'; END; BEGIN UPDATE activite.t_rubrique_facture_c SET rubrique_comptabilisation_code = t_rubriques_facturation.code, rubrique_comptabilisation_texte = t_rubriques_facturation.texte_court, rubrique_comptabilisation_section_id = t_rubriques_facturation.section_id, rubrique_comptabilisation_section_code = t_rubriques_facturation.section_code, rubrique_comptabilisation_section_texte = t_rubriques_facturation.section_texte FROM activite.t_rubriques_facturation WHERE rubrique_comptabilisation_id = t_rubriques_facturation.oid AND ( rubrique_comptabilisation_code::text IS DISTINCT FROM t_rubriques_facturation.code::text OR rubrique_comptabilisation_texte::text IS DISTINCT FROM t_rubriques_facturation.texte_court::text OR rubrique_comptabilisation_section_id::bigint[] IS DISTINCT FROM t_rubriques_facturation.section_id::bigint[] OR rubrique_comptabilisation_section_code::text[] IS DISTINCT FROM t_rubriques_facturation.section_code::text[] OR rubrique_comptabilisation_section_texte::text[] IS DISTINCT FROM t_rubriques_facturation.section_texte::text[] ); EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'6'; END; BEGIN UPDATE activite.t_rubrique_facture_c SET prestation_code = t_prestations.code, prestation_texte = t_prestations.texte_court, prestation_section_id = t_prestations.section_id, prestation_section_code = t_prestations.section_code, prestation_section_texte = t_prestations.section_texte FROM activite.t_prestations WHERE prestation_id = t_prestations.oid AND ( prestation_code::text IS DISTINCT FROM t_prestations.code::text OR prestation_texte::text IS DISTINCT FROM t_prestations.texte_court::text OR prestation_section_id::bigint[] IS DISTINCT FROM t_prestations.section_id::bigint[] OR prestation_section_code::text[] IS DISTINCT FROM t_prestations.section_code::text[] OR prestation_section_texte::text[] IS DISTINCT FROM t_prestations.section_texte::text[] ); EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'7'; END; BEGIN UPDATE activite.t_rubrique_facture_c SET compte_produit_code = t_compte.code, compte_produit_texte = t_compte.texte_court, compte_produit_section_id = t_compte.section_id, compte_produit_section_code = t_compte.section_code, compte_produit_section_texte = t_compte.section_texte FROM activite.t_compte WHERE compte_produit_id = t_compte.oid AND ( compte_produit_code::text IS DISTINCT FROM t_compte.code::text OR compte_produit_texte::text IS DISTINCT FROM t_compte.texte_court::text OR compte_produit_section_id::bigint[] IS DISTINCT FROM t_compte.section_id::bigint[] OR compte_produit_section_code::text[] IS DISTINCT FROM t_compte.section_code::text[] OR compte_produit_section_texte::text[] IS DISTINCT FROM t_compte.section_texte::text[] ); EXCEPTION WHEN others THEN RAISE NOTICE 'Erreur %' ,'8'; END; RETURN 'OK'; END;