## PCD_IMPORT_GROUPES

Doc
Details
Grants
References
Dependencies
Code

TEXT
    PROCEDURE          "PCD_IMPORT_GROUPES" as
    cursor cur_imports is
      select * from import_groupes where libelle_groupe is not null;
    v_id_acteur number;
    v_id_groupe number;
    v_libelle_groupe varchar2(20);
    cpt number default 0;
    begin
      for enr_import in cur_imports
        loop
          begin
          v_libelle_groupe := upper(enr_import.libelle_groupe);
          -- On cherche l'identifiant de l'acteur
          select pf_groupe into v_id_acteur from acteurs where upper(login) = upper(enr_import.login);
          dbms_output.put_line('Acteur OK ' || 'groupe -' || v_libelle_groupe || '-');
          -- On cherche l'identifiant du groupe
          select p_id into v_id_groupe from groupes where upper(libelle) = v_libelle_groupe
            and f_type in (select p_id from types_groupes where libelle = 'groupe');

          cpt := cpt +1;
          -- Pour l'acteur donné, on supprime l'ancien groupe
          if(v_libelle_groupe = 'AS' or v_libelle_groupe = 'BS'
          or v_libelle_groupe = 'CS' or v_libelle_groupe = 'DS'
          or v_libelle_groupe = 'ES')
            then
            delete groupes_parentes where pf_fils = v_id_acteur and
            pf_pere in (select p_id from groupes where
                    libelle in( 'AS', 'BS','CS', 'DS','ES') and f_type in (select p_id from types_groupes where libelle = 'groupe')) ;
          end if;
          if(v_libelle_groupe = 'A' or v_libelle_groupe = 'B'
          or v_libelle_groupe = 'C' or v_libelle_groupe = 'D'
          or v_libelle_groupe = 'E')
            then
            delete groupes_parentes where pf_fils = v_id_acteur and
            pf_pere in (select p_id from groupes where
                    libelle in( 'A', 'B','C', 'D','E') and f_type in (select p_id from types_groupes where libelle = 'groupe')) ;
          end if;

          -- On insère l'acteur dans son nouveau groupe
          insert into groupes_parentes values(v_id_groupe,v_id_acteur);
          exception
            when no_data_found then
              null;
          end;
        end loop;
        dbms_output.put_line('Nbre d''acteurs mis a jour '|| cpt);
    end;