The best way to handle these situations is to create a package. Within the package, create a table of records and two triggers: a row trigger and an "after" statement trigger. Record the data being deleted into the table of records during the row trigger processing then manipulate the database as needed in the statement trigger using the table of records. Thus no table access occurs during mutation.