Using NEXT clause to set periodic materilized view refresh in oracle and verifying refresh
I'd use DBMS_SCHEDULER instead, with a job for each refresh. It's then easier to manage, and view previous executions.

CREATE OR REPLACE PROCEDURE REFRESH_MY_VIEW
AS
BEGIN
    DBMS_MVIEW.REFRESH('MY_VIEW');
END;
/


Refresh at 8am every day:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB
    (
    job_name            =&gt; 'REFRESH_MY_VIEW',
    job_type            =&gt; 'PLSQL_BLOCK',
    job_action          =&gt; 'REFRESH_MY_VIEW',
    number_of_arguments =&gt; 0,
    start_date          =&gt; SYSTIMESTAMP, 
    repeat_interval =&gt; 'freq=daily; byhour=8; byminute=0; bysecond=0;',
    end_date            =&gt; NULL,
    enabled             =&gt; TRUE,
    auto_drop           =&gt; FALSE,
    comments            =&gt; 'Refreshes MY_VIEW at 8am'
    );
END;
/


Refresh at 8pm every day:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB
    (
    job_name            =&gt; 'REFRESH_MY_VIEW',
    job_type            =&gt; 'PLSQL_BLOCK',
    job_action          =&gt; 'REFRESH_MY_VIEW',
    number_of_arguments =&gt; 0,
    start_date          =&gt; SYSTIMESTAMP, 
    repeat_interval =&gt; 'freq=daily; byhour=20; byminute=0; bysecond=0;',
    end_date            =&gt; NULL,
    enabled             =&gt; TRUE,
    auto_drop           =&gt; FALSE,
    comments            =&gt; 'Refreshes MY_VIEW at 8pm'
    );
END;
/


The *_SCHEDULER_JOB_LOG and *_SCHEDULER_JOB_RUN_DETAILS data dictionary views provide all the information you need to track what executed, when, and if any errors occurred. Documentation link here.

As pointed out in a comment, you can add multiple by hour clauses, comma-separated, as follows: repeat_interval =&gt; 'freq=daily; byhour=8,20; byminute=0; bysecond=0;'