All the objects in the database are valid, but at run time I am getting error "ORA-0658 PL/SQL: could not find program unit being called." I selected select * from all_objects where status='INVALID' and got no rows.
The ORA-0658 error is not really the cause of your problem. There should be other error messages indicating the cause of your problem. So you will have to look at the other errors as well.
Typically, something has gone wrong (it could be an invalid object, or it could be a memory error, etc.) that causes your PL/SQL block to not be able to find what it is looking for. You know that your PL/SQL block is not finding what it needs. But now you need to determine why it cannot find what it is looking for. The other error messages should give you a clue.
Dig Deeper on Oracle database design and architecture