venki has asked for the wisdom of the Perl Monks concerning the following question:


Hi Perl Monks

I would like to proceed my program even if there is any error that comes when a particular sql statment runs. Is it possible! Let me know the different ways that i can do it.

Ex:

$sqlc = qq{select * from tab};

$stha = $dbh->prepare($sqlc);

$stha->execute(); --> if it fails here, i want my prgram to proceed further.

Replies are listed 'Best First'.
Re: sql execute method
by dondelelcaro (Monk) on Nov 18, 2002 at 21:44 UTC
    While waswas-fng's correct suggestion to wrap $sth->execute in an eval will work, a more proper method is to check the results of the $dbh->prepare statement, and probably also check to make sure that the $dbh itself is connected to a database.

    You should modify your code to look something like this:
    $sth = $dbh->prepare($sql); if (defined $sth and not defined $dbh->err) { my $rv = $sth->execute(); # check for errors in the execute using $rv->errstr, etc. } else { print STDERR "Unable to prepare: $dbh->errstr\n"; }
    Additionally, in many cases, you probably don't even want to bother using prepare or execute, and should just go for the nice select* or do functions which take care of all of the nastiness for you.
Re: sql execute method
by waswas-fng (Curate) on Nov 18, 2002 at 18:33 UTC
    Wrap it in eval.

    -Waswas