You can declare the trigger as using an autonomous transaction...
...but this won't give you what you're looking for!
This is a new transaction. So the trigger can't see the changed rows from the calling statement:
create table t (
c1 int primary key
);
create materialized view log on t
with rowid including new values;
create materialized view mv
refresh fast on demand
as
select count(*) from t;
create or replace trigger t_aiuder
after insert or update or delete on t
declare
pragma autonomous_transaction;
begin
if inserting then
dbms_mview.refresh ( 'mv', 'F' );
else
dbms_mview.refresh ( 'mv', 'C' );
end if;
commit;
end;
/
insert into t values ( 1 );
select count(*) from t;
COUNT(*)
1
select * from mv;
COUNT(*)
0
commit;
delete t;
select count(*) from t;
COUNT(*)
0
select * from mv;
COUNT(*)
1
commit;
Submitting an old-style job in the trigger may help. Or you can manually write the refresh after your transactions.