Maybe DBMS_JOB is not the answer here, and you just need to loop the procedure with a chosen interval between end and start ... DBLS_LOCK.SLEEP() would do this for you.

Having said that, the NEXT_DATE is calculated at the end of the job execution. If you wanted the job to start on the next hour after it last finished, your next_date expression would be ...

Trunc(sysdate,'HH')+(1/24)

Does that help?