Here's a little test program I use to replicate the issue:
my $sth=$dbh->prepare_cached('select count(*) from EXAMPLE');
When I do the work to EXAMPLE that invalidates the statment handle, my example code returns the following:
DBD::Oracle::st execute failed: ORA-00942: table or view does not exist (DBD ERROR: OCIStmtExecute)
DBD::Oracle::st execute failed: ORA-01003: no statement parsed (DBD ERROR: OCIStmtExecute)
What I'd like is for prepare_cached to recover gracefully from these types of intermittent hiccups. Any ideas?