How are you going to distinguish between the two cases of "the procedure is already running", and "the procedure failed"? It seems like the table-based method provides no methodology for this.
how about this ...
Use DBMS_LOCK to serialize the procedure.
Use table-row to indicate that the procedure has been started and not finished.
The table part may not be required, if the procedure uses temporary tables and commits only after complete units of work have been completed, as it would be "self-cleaning" if the procedure failed, or instance shutdown/crashed.
I suppose after a while it starts depending on the complexity of the process. I'd still use DBMS_LOCK to indicate "process already running", though.
