CREATE FUNCTION cen_insertion_perimetre_habitat() RETURNS integer AS $_$ DECLARE myrec RECORD; var_gid bigint; var_protocole bigint; var_id_lot_donnee character varying(50); BEGIN FOR myrec IN SELECT gid, protocole, lot FROM perimetre_habitat_a_importer WHERE ese_id_entite IS NULL LOOP var_gid:=myrec.gid; var_protocole:=myrec.protocole; -- ese var_id_lot_donnee:=myrec.lot; -- a ventiler dans les métadonnées EXECUTE $req$ INSERT INTO entite_spatiale_ecologique (id_entite, id_protocole, validateur_code_personne, validateur_id_structure, lot_donnee_id_lot, type_entite) VALUES(nextval('entite_spatiale_ecologique_id_entite_seq'),$req$||quote_literal(var_protocole)||$req$, null, null, $req$||quote_literal(var_id_lot_donnee)||$req$, 'perimetre_habitat') $req$; RAISE INFO 'nouvelle ESE de type perimetre_habitat ajoutée'; EXECUTE $req$ UPDATE perimetre_habitat_a_importer SET ese_id_entite=currval('entite_spatiale_ecologique_id_entite_seq'), date_ventilation=current_date WHERE gid=$req$||quote_literal(var_gid)||$req$ $req$; RAISE INFO 'ligne courante de la table perimetre_habitat_a_importer mise à jour'; EXECUTE $req$ INSERT INTO perimetre_habitat (ese_id_entite, date_obs, date_textuelle, "precision", remarque, complexe_habitat, complexe_recouvrement, geometrie) SELECT ese_id_entite, date_obs, textuelle, null, null, complexe_habitat, complexe_recouvrement, geometrie FROM perimetre_habitat_a_importer WHERE gid=$req$||var_gid||$req$; $req$; RAISE INFO 'nouveau perimetre_habitat ajouté : %', var_gid; END LOOP; EXECUTE $req$ INSERT INTO perimetre_habitat_presente_habitat (ese_id_entite, code_habitat, ordre, recouvrement, etat_conservation, valeur_patrimoniale) SELECT ese_id_entite, upper(code_corine_1), 1, recouvrement_hab_1::integer, null, null FROM perimetre_habitat_a_importer WHERE upper(code_corine_1) IS NOT NULL AND (ese_id_entite, upper(code_corine_1)) NOT IN (SELECT ese_id_entite, upper(code_habitat) FROM perimetre_habitat_presente_habitat); $req$; RAISE INFO 'habitats 1 ajoutés'; EXECUTE $req$ INSERT INTO perimetre_habitat_presente_habitat (ese_id_entite, code_habitat, ordre, recouvrement, etat_conservation, valeur_patrimoniale) SELECT ese_id_entite, upper(code_corine_2), 2, recouvrement_hab_2::integer, null, null FROM perimetre_habitat_a_importer WHERE code_corine_2 IS NOT NULL AND (ese_id_entite, code_corine_2) NOT IN (SELECT ese_id_entite, upper(code_habitat) FROM perimetre_habitat_presente_habitat); $req$; RAISE INFO 'habitats 2 ajoutés'; EXECUTE $req$ INSERT INTO perimetre_habitat_presente_habitat (ese_id_entite, code_habitat, ordre, recouvrement, etat_conservation, valeur_patrimoniale) SELECT ese_id_entite, upper(code_corine_3), 3, recouvrement_hab_3::integer, null, null FROM perimetre_habitat_a_importer WHERE code_corine_3 IS NOT NULL AND (ese_id_entite, code_corine_3) NOT IN (SELECT ese_id_entite, upper(code_habitat) FROM perimetre_habitat_presente_habitat); $req$; RAISE INFO 'habitats 3 ajoutés'; RETURN 1; END; $_$ LANGUAGE plpgsql;