ORA-14551: impossible d'effectuer une opération DML à l'intérieur d'une requête

J'ai le texte suivant à l'intérieur d'un package et il me donne une erreur:

ORA-14551: cannot perform a DML operation inside a query

Code est:

DECLARE 
    CURSOR F IS
        SELECT ROLE_ID 
        FROM ROLE 
        WHERE GROUP = 3 
        ORDER BY GROUP ASC;

BEGIN
FOR R IN F LOOP

DELETE FROM my_gtt_1;
COMMIT;

 INSERT INTO my_gtt_1
  ( USER, role, code, status )
(SELECT 
 trim(r.user), r.role, r.code, MAX(status_id)
FROM 
  table1 r, 
  tabl2 c
WHERE 
      r.role = R.role
  AND r.code IS NOT NULL
  AND c.group = 3
  GROUP BY 
  r.user, r.role, r.code);

  SELECT c.role,
                  c.subgroup,
                  c.subgroup_desc,
                  v_meb_cnt
                  INTO record_type
           FROM   ROLE c
           WHERE c.group = '3' and R.role = '19'
           GROUP BY c.role,c.subgroup,c.subgroup_desc;

  PIPE ROW (record_type);



END LOOP;

END;

J'appelle le paquet comme ça dans un de mes procédures...:

OPEN cv_1 for SELECT * FROM TABLE(my_package.my_func);

comment puis-je éviter ce ORA-14551 erreur?

Pour info je n'ai pas collé le code à l'intérieur de la boucle. Fondamentalement, à l'intérieur de la boucle que je suis entrer dans des trucs dans la GTT, en supprimant des trucs de GTT et ensuite de sélectionner des éléments de GTT et en les ajoutant à un curseur.

OriginalL'auteur learn_plsql | 2010-07-19