return: text lang: plpgsql src: | DECLARE f_finess_oid integer; f_finess_code TEXT; f_dbhost TEXT; f_dbname TEXT; f_dbport TEXT; x_credentials base.user_credentials; x_link_cstring TEXT; view_def TEXT; first_db TEXT; oidField TEXT; oidFieldComplete TEXT; oidFieldText TEXT; ch TEXT; table_name TEXT; sumField TEXT; selectCmd TEXT; selectCmdBase TEXT; temp_cursor refcursor; oids_array TEXT; oids_array_bis TEXT; oids_array_toapply TEXT; oids_array_bis_toapply TEXT; onmaxpercent integer; onmaxnumber integer; winteger integer; select_percent integer; other_percent integer; onfield_text TEXT; rec RECORD; BEGIN -- Informations de connexion communes SELECT * INTO x_credentials FROM base.cti_user_credentials(); view_def = 'DROP VIEW IF EXISTS pmsi.v_consolidation_imports_1; CREATE OR REPLACE VIEW pmsi.v_consolidation_imports_1 AS '; first_db = '1'; selectCmd = 'SELECT DISTINCT t_finess.oid, t_finess.code, t_finess_database.dbhost, t_finess_database.dbname, t_finess_database.dbport FROM base.t_finess, base.t_finess_database WHERE t_finess.oid = t_finess_database.finess_id AND t_finess_database.dbname != '''' ORDER BY t_finess_database.dbname'; OPEN temp_cursor FOR EXECUTE selectCmd; FETCH temp_cursor INTO f_finess_oid, f_finess_code, f_dbhost, f_dbname, f_dbport; WHILE FOUND LOOP IF (first_db != '1') THEN view_def = view_def || ' UNION ALL '; END IF; first_db = '0'; x_link_cstring = format('host=%s port=%s dbname=%s user=%s password=%s', f_dbhost, f_dbport, f_dbname, x_credentials.login, x_credentials.password ); view_def = view_def || format('(SELECT %s AS finess_id, %L::text AS finess_code, p_imports.* FROM dblink(%L, %L, true) AS %s)', f_finess_oid, f_finess_code, x_link_cstring, 'SELECT oid, texte, date_import, etat, nb_rss, nb_rum, nb_rsf, date_debut, date_fin, nb_erreurs, nb_avertissements, etat_en_cours, traitement_a_faire FROM pmsi.p_imports', 'p_imports(oid bigint, texte text, date_import date, etat text, nb_rss numeric, nb_rum numeric, nb_rsf numeric, date_debut date, date_fin date, nb_erreurs numeric, nb_avertissements numeric, etat_en_cours text, traitement_a_faire text)' ); FETCH temp_cursor INTO f_finess_oid, f_finess_code, f_dbhost, f_dbname, f_dbport; END LOOP; CLOSE temp_cursor; -- Fermeture de la boucle, fin de la requête générée, complétée par affectation du propriétaire view_def = view_def || ';'; view_def = view_def || 'ALTER TABLE pmsi.v_consolidation_imports_1 OWNER TO ' || x_credentials.login; EXECUTE view_def; RETURN view_def; END;