0 ', 'temp t_ucd' ); INSERT INTO base.t_ucd( code, texte, texte_court, laboratoire_texte, conditionnement_texte, atc_code, atc_texte, ephmra_code, ephmra_texte, prestation_defaut_id) SELECT code, texte, texte_court, laboratoire_texte, conditionnement_texte, atc_code, atc_texte, ephmra_code, ephmra_texte, 0 FROM t_ucd WHERE code NOT IN (SELECT code FROM base.t_ucd WHERE code IS NOT NULL); DROP TABLE IF EXISTS c_ucd; CREATE TEMP TABLE c_ucd AS SELECT t_ucd_from.oid AS from_oid, COALESCE(t_ucd.oid,0) AS to_oid FROM t_ucd t_ucd_from LEFT JOIN base.t_ucd ON t_ucd_from.code = t_ucd.code; -- lpp SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT * FROM base.t_lpp WHERE oid <> 0 ', 'temp t_lpp' ); INSERT INTO base.t_lpp( code, texte, texte_court) SELECT code, texte, texte_court FROM t_lpp WHERE code NOT IN (SELECT code FROM base.t_lpp WHERE code IS NOT NULL); DROP TABLE IF EXISTS c_lpp; CREATE TEMP TABLE c_lpp AS SELECT t_lpp_from.oid AS from_oid, COALESCE(t_lpp.oid,0) AS to_oid FROM t_lpp t_lpp_from LEFT JOIN base.t_lpp ON t_lpp_from.code = t_lpp.code; -- comptes SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT * FROM eco.t_compte WHERE oid <> 0 ', 'temp t_compte' ); -- Traitement des codes déjà remontés avec l'ancienne stratégie : on enlève le suffixe aux codes. UPDATE eco.t_compte SET code = replace(code, '[TPX]', '') WHERE strpos(code, '[TPX]') > 0 ; -- Màj des champs potentiellement màj dans l'env source. -- Le code est traité comme le texte[_court]. UPDATE eco.t_compte SET code = t_compte_from.code, texte = t_compte_from.texte, texte_court = t_compte_from.texte_court FROM t_compte AS t_compte_from WHERE 1=1 AND t_compte.code_original = '[CPX]' || t_compte_from.oid AND (1!=1 OR t_compte.code IS DISTINCT FROM t_compte_from.code OR t_compte.texte IS DISTINCT FROM t_compte_from.texte OR t_compte.texte_court IS DISTINCT FROM t_compte_from.texte_court) ; -- Insertion des nouveaux comptes. INSERT INTO eco.t_compte ( code, code_original, texte, texte_court) SELECT code AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_compte WHERE '[CPX]' || oid NOT IN (SELECT code_original FROM eco.t_compte WHERE code_original IS NOT NULL) ; -- Création de la table de correspondance oid env source -> oid consolidé. -- Lorsque le code/texte est identique n'en prendre qu'un seul (au hasard) pour le "fusionner". DROP TABLE IF EXISTS c_compte ; CREATE TEMP TABLE c_compte AS SELECT t_compte_from.oid AS from_oid, max(COALESCE(t_compte_fusion.oid, t_compte.oid, 0)) AS to_oid FROM t_compte AS t_compte_from LEFT JOIN eco.t_compte ON t_compte.code_original = '[CPX]' || t_compte_from.oid LEFT JOIN eco.t_compte as t_compte_fusion ON 1=1 AND t_compte_fusion.code = t_compte_from.code AND t_compte_fusion.texte = t_compte_from.texte GROUP BY 1 ; -- ATC SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT * FROM eco.t_classification_atc WHERE oid <> 0 ', 'temp t_classification_atc' ); INSERT INTO eco.t_classification_atc ( code, code_original, texte, texte_court ) SELECT code, code_original, texte, texte_court FROM t_classification_atc WHERE code NOT IN (SELECT code FROM eco.t_classification_atc WHERE code IS NOT NULL); DROP TABLE IF EXISTS c_classification_atc; CREATE TEMP TABLE c_classification_atc AS SELECT t_classification_atc_from.oid AS from_oid, COALESCE(t_classification_atc.oid,0) AS to_oid FROM t_classification_atc t_classification_atc_from LEFT JOIN eco.t_classification_atc ON t_classification_atc_from.code = t_classification_atc.code; -- Standard ATC SELECT eco.cti_reorganize_classification_atc(); -- unites SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_unites WHERE oid <> 0 ', 'temp t_unites_from' ); UPDATE t_unites_from SET to_oid = t_unites.oid FROM eco.t_unites WHERE upper(t_unites.code) = upper(t_unites_from.code) || '[TPX]' AND upper(t_unites.texte) = upper(t_unites_from.texte) OR t_unites.oid = t_unites_from.oid + [IPX]; INSERT INTO eco.t_unites ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_unites_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_unites; CREATE TEMP TABLE c_unites AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_unites_from; -- familles articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_familles_articles WHERE oid <> 0 ', 'temp t_familles_articles_from' ); UPDATE t_familles_articles_from SET to_oid = t_familles_articles.oid FROM eco.t_familles_articles WHERE upper(t_familles_articles.code) = upper(t_familles_articles_from.code) || '[TPX]' AND upper(t_familles_articles.texte) = upper(t_familles_articles_from.texte) OR t_familles_articles.oid = t_familles_articles_from.oid + [IPX]; INSERT INTO eco.t_familles_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_familles_articles_from WHERE to_oid = 0 ; DROP TABLE IF EXISTS c_familles_articles; CREATE TEMP TABLE c_familles_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_familles_articles_from; -- sous_familles articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_sous_familles_articles WHERE oid <> 0 ', 'temp t_sous_familles_articles_from' ); UPDATE t_sous_familles_articles_from SET to_oid = t_sous_familles_articles.oid FROM eco.t_sous_familles_articles WHERE upper(t_sous_familles_articles.code) = upper(t_sous_familles_articles_from.code) || '[TPX]' AND upper(t_sous_familles_articles.texte) = upper(t_sous_familles_articles_from.texte) OR t_sous_familles_articles.oid = t_sous_familles_articles_from.oid + [IPX]; INSERT INTO eco.t_sous_familles_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_sous_familles_articles_from WHERE to_oid = 0 ; DROP TABLE IF EXISTS c_sous_familles_articles; CREATE TEMP TABLE c_sous_familles_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_sous_familles_articles_from; -- types articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_types_articles WHERE oid <> 0 ', 'temp t_types_articles_from' ); UPDATE t_types_articles_from SET to_oid = t_types_articles.oid FROM eco.t_types_articles WHERE (upper(t_types_articles.code) = upper(t_types_articles_from.code) || '[TPX]' AND upper(t_types_articles.texte) = upper(t_types_articles_from.texte)) OR t_types_articles.oid = t_types_articles_from.oid + [IPX]; INSERT INTO eco.t_types_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_types_articles_from WHERE to_oid = 0 ; DROP TABLE IF EXISTS c_types_articles; CREATE TEMP TABLE c_types_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_types_articles_from; -- categories articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_categories_articles WHERE oid <> 0 ', 'temp t_categories_articles_from' ); UPDATE t_categories_articles_from SET to_oid = t_categories_articles.oid FROM eco.t_categories_articles WHERE upper(t_categories_articles.code) = upper(t_categories_articles_from.code) || '[TPX]' AND upper(t_categories_articles.texte) = upper(t_categories_articles_from.texte) OR t_categories_articles.oid = t_categories_articles_from.oid + [IPX]; INSERT INTO eco.t_categories_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_categories_articles_from WHERE to_oid = 0 ; DROP TABLE IF EXISTS c_categories_articles; CREATE TEMP TABLE c_categories_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_categories_articles_from; -- sous_categories articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_sous_categories_articles WHERE oid <> 0 ', 'temp t_sous_categories_articles_from' ); UPDATE t_sous_categories_articles_from SET to_oid = t_sous_categories_articles.oid FROM eco.t_sous_categories_articles WHERE upper(t_sous_categories_articles.code) = upper(t_sous_categories_articles_from.code) || '[TPX]' AND upper(t_sous_categories_articles.texte) = upper(t_sous_categories_articles_from.texte) OR t_sous_categories_articles.oid = t_sous_categories_articles_from.oid + [IPX]; INSERT INTO eco.t_sous_categories_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_sous_categories_articles_from WHERE to_oid = 0 ; DROP TABLE IF EXISTS c_sous_categories_articles; CREATE TEMP TABLE c_sous_categories_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_sous_categories_articles_from; -- lieux SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_lieux WHERE oid <> 0 ', 'temp t_lieux_from' ); UPDATE t_lieux_from SET to_oid = t_lieux.oid FROM eco.t_lieux WHERE upper(t_lieux.code) = upper(t_lieux_from.code) || '[TPX]' AND upper(t_lieux.texte) = upper(t_lieux_from.texte) OR t_lieux.oid = t_lieux_from.oid + [IPX]; INSERT INTO eco.t_lieux ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_lieux_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_lieux; CREATE TEMP TABLE c_lieux AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_lieux_from; -- articles SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_articles WHERE oid <> 0 AND oid IN (SELECT oid FROM eco.p_oids WHERE code_table = ''articles'') ', 'temp t_articles_from' ); CREATE INDEX i_articles_from_oid ON t_articles_from USING btree (oid); CREATE INDEX i_articles_from_code ON t_articles_from USING btree (code); CREATE INDEX i_articles_from_famille_id ON t_articles_from USING btree (famille_id); CREATE INDEX i_articles_from_sous_famille_id ON t_articles_from USING btree (sous_famille_id); CREATE INDEX i_articles_from_categorie_id ON t_articles_from USING btree (categorie_id); CREATE INDEX i_articles_from_sous_categorie_id ON t_articles_from USING btree (sous_categorie_id); CREATE INDEX i_articles_from_unite_stockage_id ON t_articles_from USING btree (unite_stockage_id ); CREATE INDEX i_articles_from_unite_distribution_id ON t_articles_from USING btree (unite_distribution_id); CREATE INDEX i_articles_from_classification_atc_id ON t_articles_from USING btree (classification_atc_id); CREATE INDEX i_articles_from_compte_id ON t_articles_from USING btree (compte_id); UPDATE t_articles_from SET to_oid = t_articles.oid FROM eco.t_articles LEFT JOIN eco.t_providers ON t_providers.oid = 0 WHERE t_providers.oid IS DISTINCT FROM NULL AND upper(t_articles.code) = upper(t_articles_from.code) || '[TPX]' AND upper(translate(t_articles.texte,' ,./:=()','')) = upper(translate(t_articles_from.texte,' ,./:=()','')) AND t_articles.oid < 2000000000000 ; UPDATE t_articles_from SET to_oid = subview.oid FROM ( SELECT upper(translate(t_articles.texte,' ,./:=()','')) AS texte, MIN(oid) AS oid FROM eco.t_articles WHERE oid <> 0 GROUP BY 1 ) subview LEFT JOIN eco.t_providers ON t_providers.oid = 0 WHERE t_providers.oid IS DISTINCT FROM NULL AND subview.texte = upper(translate(t_articles_from.texte,' ,./:=()','')); UPDATE t_articles_from SET to_oid = t_articles.oid FROM eco.t_articles WHERE to_oid = 0 AND t_articles.oid = t_articles_from.oid + [IPX] ; INSERT INTO eco.t_articles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_articles_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_articles; CREATE TEMP TABLE c_articles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_articles_from; CREATE INDEX c_articles_i1 ON c_articles USING btree (from_oid); CREATE INDEX c_articles_i2 ON c_articles USING btree (to_oid); UPDATE eco.t_articles SET code = t_articles_from.code || '[TPX]', texte = t_articles_from.texte, texte_court = t_articles_from.texte_court FROM t_articles_from WHERE t_articles.oid = t_articles_from.to_oid AND (t_articles.code IS DISTINCT FROM t_articles_from.code || '[TPX]' OR t_articles.texte IS DISTINCT FROM t_articles_from.texte) AND t_articles.code LIKE '%[TPX]' ; UPDATE eco.t_articles SET famille_id = COALESCE(c_familles_articles.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_familles_articles ON famille_id = c_familles_articles.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.famille_id IS DISTINCT FROM COALESCE(c_familles_articles.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET sous_famille_id = COALESCE(c_sous_familles_articles.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_sous_familles_articles ON sous_famille_id = c_sous_familles_articles.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.sous_famille_id IS DISTINCT FROM COALESCE(c_sous_familles_articles.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET categorie_id = COALESCE(c_categories_articles.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_categories_articles ON categorie_id = c_categories_articles.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.categorie_id IS DISTINCT FROM COALESCE(c_categories_articles.to_oid,0) AND t_articles.code LIKE '%[TPX]';; UPDATE eco.t_articles SET sous_categorie_id = COALESCE(c_sous_categories_articles.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_sous_categories_articles ON sous_categorie_id = c_sous_categories_articles.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.sous_categorie_id IS DISTINCT FROM COALESCE(c_sous_categories_articles.to_oid,0) AND t_articles.code LIKE '%[TPX]';; UPDATE eco.t_articles SET type_id = COALESCE(c_types_articles.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_types_articles ON type_id = c_types_articles.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.type_id IS DISTINCT FROM COALESCE(c_types_articles.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET lpp_id = COALESCE(c_lpp.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_lpp ON lpp_id = c_lpp.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.lpp_id IS DISTINCT FROM COALESCE(c_lpp.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET ucd_id = COALESCE(c_ucd.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_ucd ON ucd_id = c_ucd.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.ucd_id IS DISTINCT FROM COALESCE(c_ucd.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET unite_stockage_id = COALESCE(c_unites.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_unites ON unite_stockage_id = c_unites.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.unite_stockage_id IS DISTINCT FROM COALESCE(c_unites.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET unite_distribution_id = COALESCE(c_unites.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_unites ON unite_distribution_id = c_unites.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.unite_distribution_id IS DISTINCT FROM COALESCE(c_unites.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET classification_atc_id = COALESCE(c_classification_atc.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_classification_atc ON classification_atc_id = c_classification_atc.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.classification_atc_id IS DISTINCT FROM COALESCE(c_classification_atc.to_oid,0) AND t_articles.code LIKE '%[TPX]'; UPDATE eco.t_articles SET compte_id = COALESCE(c_compte.to_oid,0) FROM t_articles_from JOIN c_articles ON t_articles_from.oid = c_articles.from_oid LEFT JOIN c_compte ON compte_id = c_compte.from_oid WHERE t_articles.oid = c_articles.to_oid AND t_articles.compte_id IS DISTINCT FROM COALESCE(c_compte.to_oid,0) AND t_articles.code LIKE '%[TPX]'; ]]> 0 ', 'temp t_types_fournisseurs_from' ); UPDATE t_types_fournisseurs_from SET to_oid = t_types_fournisseurs.oid FROM eco.t_types_fournisseurs WHERE upper(t_types_fournisseurs.code) = upper(t_types_fournisseurs_from.code) || '[TPX]' AND upper(t_types_fournisseurs.texte) = upper(t_types_fournisseurs_from.texte) OR t_types_fournisseurs.oid = t_types_fournisseurs_from.oid + [IPX]; INSERT INTO eco.t_types_fournisseurs ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_types_fournisseurs_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_types_fournisseurs; CREATE TEMP TABLE c_types_fournisseurs AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_types_fournisseurs_from; -- fournisseurs SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_fournisseurs WHERE oid <> 0 AND oid IN (SELECT oid FROM eco.p_oids WHERE code_table = ''fournisseurs'') ', 'temp t_fournisseurs_from' ); UPDATE t_fournisseurs_from SET to_oid = t_fournisseurs.oid FROM eco.t_fournisseurs LEFT JOIN eco.t_providers ON t_providers.oid = 0 WHERE t_providers.oid IS DISTINCT FROM NULL AND upper(t_fournisseurs.code) = upper(t_fournisseurs_from.code) || '[TPX]' AND upper(t_fournisseurs.texte) = upper(t_fournisseurs_from.texte); UPDATE t_fournisseurs_from SET to_oid = t_fournisseurs.oid FROM eco.t_fournisseurs LEFT JOIN eco.t_providers ON t_providers.oid = 0 WHERE t_providers.oid IS DISTINCT FROM NULL AND upper(t_fournisseurs.code) = upper(t_fournisseurs_from.code) || '[TPX]' AND upper(translate(t_fournisseurs.texte,' ,./:','')) = upper(translate(t_fournisseurs_from.texte,' ,./:','')) AND t_fournisseurs.oid < 2000000000000; UPDATE t_fournisseurs_from SET to_oid = t_fournisseurs.oid FROM eco.t_fournisseurs WHERE to_oid = 0 AND t_fournisseurs.oid = t_fournisseurs_from.oid + [IPX]; INSERT INTO eco.t_fournisseurs ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_fournisseurs_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_fournisseurs; CREATE TEMP TABLE c_fournisseurs AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_fournisseurs_from; UPDATE eco.t_fournisseurs SET code = t_fournisseurs_from.code || '[TPX]', texte = t_fournisseurs_from.texte, texte_court = t_fournisseurs_from.texte_court, code_original = '#[CPX]' || t_fournisseurs_from.oid FROM c_fournisseurs JOIN t_fournisseurs_from ON t_fournisseurs_from.oid = c_fournisseurs.from_oid WHERE t_fournisseurs.oid = c_fournisseurs.to_oid AND (SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND ( t_fournisseurs.code IS DISTINCT FROM t_fournisseurs_from.code OR t_fournisseurs.texte IS DISTINCT FROM t_fournisseurs_from.texte OR t_fournisseurs.texte_court IS DISTINCT FROM t_fournisseurs_from.texte_court OR t_fournisseurs.code_original IS DISTINCT FROM '[CPX]' || t_fournisseurs_from.oid ) ; DELETE FROM eco.t_fournisseurs WHERE (SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND oid BETWEEN [IPX] AND [IPX] + 900000000000 AND (oid - [IPX]) NOT IN (SELECT oid FROM t_fournisseurs_from) ; UPDATE eco.t_fournisseurs SET code_original = '[CPX]' || t_fournisseurs_from.oid FROM c_fournisseurs JOIN t_fournisseurs_from ON t_fournisseurs_from.oid = c_fournisseurs.from_oid WHERE (SELECT count(*) FROM eco.t_providers WHERE t_providers.oid = 0) = 0 AND t_fournisseurs.oid = c_fournisseurs.to_oid AND t_fournisseurs.oid BETWEEN [IPX] AND [IPX] + 900000000000 AND ( t_fournisseurs.code_original IS DISTINCT FROM ('[CPX]' || t_fournisseurs_from.oid) ) ; UPDATE eco.t_fournisseurs SET type_id = COALESCE(c_types_fournisseurs.to_oid,0) FROM t_fournisseurs_from JOIN c_fournisseurs ON t_fournisseurs_from.oid = c_fournisseurs.from_oid LEFT JOIN c_types_fournisseurs ON type_id = c_types_fournisseurs.from_oid WHERE t_fournisseurs.oid = c_fournisseurs.to_oid AND t_fournisseurs.type_id IS DISTINCT FROM COALESCE(c_types_fournisseurs.to_oid,0) AND t_fournisseurs.code LIKE '%[TPX]' ; UPDATE eco.t_articles SET ref_fournisseur_id = sub.ref_ids, ref_fournisseur_code = sub.ref_codes, ref_fournisseur_texte = sub.ref_textes FROM ( SELECT sub2.to_oid, array_agg(c_fournisseurs.to_oid) AS ref_ids, array_agg(codes) AS ref_codes, array_agg(textes) AS ref_textes FROM ( SELECT to_oid, unnest(ref_fournisseur_id) AS ids, unnest(ref_fournisseur_code) AS codes, unnest(ref_fournisseur_texte) as textes FROM t_articles_from ) sub2 LEFT JOIN c_fournisseurs ON ids = from_oid GROUP BY 1 ) sub WHERE t_articles.oid = sub.to_oid AND (ref_fournisseur_id IS DISTINCT FROM ref_ids OR ref_fournisseur_code IS DISTINCT FROM ref_codes OR ref_fournisseur_texte IS DISTINCT FROM ref_textes) AND t_articles.code LIKE '%[TPX]' ; ]]> 0 ', 'temp t_unites_fonctionnelles_from' ); UPDATE t_unites_fonctionnelles_from SET to_oid = t_unites_fonctionnelles.oid FROM eco.t_unites_fonctionnelles WHERE upper(t_unites_fonctionnelles.code) = upper(t_unites_fonctionnelles_from.code) || '[TPX]' AND upper(t_unites_fonctionnelles.texte) = upper(t_unites_fonctionnelles_from.texte) OR t_unites_fonctionnelles.oid = t_unites_fonctionnelles_from.oid + [IPX]; INSERT INTO eco.t_unites_fonctionnelles ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_unites_fonctionnelles_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_unites_fonctionnelles; CREATE TEMP TABLE c_unites_fonctionnelles AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_unites_fonctionnelles_from; -- types_mouvements SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_types_mouvements WHERE oid <> 0 ', 'temp t_types_mouvements_from' ); UPDATE t_types_mouvements_from SET to_oid = t_types_mouvements.oid FROM eco.t_types_mouvements WHERE upper(t_types_mouvements.code) = upper(t_types_mouvements_from.code) || '[TPX]' AND upper(t_types_mouvements.texte) = upper(t_types_mouvements_from.texte) OR t_types_mouvements.oid = t_types_mouvements_from.oid + [IPX]; INSERT INTO eco.t_types_mouvements ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_types_mouvements_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_types_mouvements; CREATE TEMP TABLE c_types_mouvements AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_types_mouvements_from; -- types_mouvements SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_types_mouvements WHERE oid <> 0 ', 'temp t_types_mouvements_from' ); UPDATE t_types_mouvements_from SET to_oid = t_types_mouvements.oid FROM eco.t_types_mouvements WHERE upper(t_types_mouvements.code) = upper(t_types_mouvements_from.code) || '[TPX]' AND upper(t_types_mouvements.texte) = upper(t_types_mouvements_from.texte) OR t_types_mouvements.oid = t_types_mouvements_from.oid + [IPX]; INSERT INTO eco.t_types_mouvements ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_types_mouvements_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_types_mouvements; CREATE TEMP TABLE c_types_mouvements AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_types_mouvements_from; -- gestionnaires SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_gestionnaires WHERE oid <> 0 ', 'temp t_gestionnaires_from' ); UPDATE t_gestionnaires_from SET to_oid = t_gestionnaires.oid FROM eco.t_gestionnaires WHERE upper(t_gestionnaires.code) = upper(t_gestionnaires_from.code) || '[TPX]' AND upper(t_gestionnaires.texte) = upper(t_gestionnaires_from.texte) OR t_gestionnaires.oid = t_gestionnaires_from.oid + [IPX]; INSERT INTO eco.t_gestionnaires ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_gestionnaires_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_gestionnaires; CREATE TEMP TABLE c_gestionnaires AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_gestionnaires_from; -- centres_responsabilites SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT *, 0::bigint AS to_oid FROM eco.t_centres_responsabilites WHERE oid <> 0 ', 'temp t_centres_responsabilites_from' ); UPDATE t_centres_responsabilites_from SET to_oid = t_centres_responsabilites.oid FROM eco.t_centres_responsabilites WHERE upper(t_centres_responsabilites.code) = upper(t_centres_responsabilites_from.code) || '[TPX]' AND upper(t_centres_responsabilites.texte) = upper(t_centres_responsabilites_from.texte) OR t_centres_responsabilites.oid = t_centres_responsabilites_from.oid + [IPX]; INSERT INTO eco.t_centres_responsabilites ( oid, code, code_original, texte, texte_court ) SELECT oid + [IPX], code || '[TPX]' AS code, '[CPX]' || oid AS code_original, texte, texte_court FROM t_centres_responsabilites_from WHERE to_oid = 0; DROP TABLE IF EXISTS c_centres_responsabilites; CREATE TEMP TABLE c_centres_responsabilites AS SELECT oid AS from_oid, CASE WHEN to_oid <> 0 THEN to_oid ELSE oid + [IPX] END AS to_oid FROM t_centres_responsabilites_from; -- profils comptables SELECT base.cti_copy_table('dbname=[DBNAME] host=[DBHOST] port=[DBPORT] user=[DBUSERNAME] password=[DBPASSWORD]', ' SELECT * FROM eco.t_profils_comptables WHERE oid <> 0 ', 'temp t_profils_comptables' ); INSERT INTO eco.t_profils_comptables ( oid, code_original, centre_responsabilite_id, unite_fonctionnelle_id ) SELECT oid + [IPX] AS oid, '[CPX]' || code_original AS code_original, COALESCE(c_centres_responsabilites.to_oid,0) AS centre_responsabilite_id, COALESCE(c_unites_fonctionnelles.to_oid,0) AS unite_fonctionnelle_id FROM t_profils_comptables LEFT JOIN c_centres_responsabilites ON centre_responsabilite_id = c_centres_responsabilites.from_oid LEFT JOIN c_unites_fonctionnelles ON unite_fonctionnelle_id = c_unites_fonctionnelles.from_oid; ]]>