http://qs321.pair.com?node_id=550667


in reply to Re: Database access problem
in thread Database access problem

eval{} is a general solition but is not needed in this case becaue DBI handles have two modes for reporting errors depending on the state of the RaiseError attribute.

If $dbh->{RaiseError} is false (the default) then you can ignore SQL errors simply by not checking to see if there's been one.

Personsally I always open DBI handles with RaiseError true and switch it off locally in blocks where I want to ignore or recover from SQL errors.

To drop an SQL object that may or may not exist I do:

{ local $dbh->{RaiseError} = 0; $dbh->do("drop table DSR_SMR_Result_storage_keep"); }

Obviously if the drop fails for some reason other than the object not existing then I miss the reason but since the next SQL statment is typically about to create the object again I do at least get an error there.