I'm trying to store the runtime mssql error in variable and continue with all other data.
my $sth = $dbh->prepare("exec TEST_ABC_DB.dbo.testprocedure");
$sth->execute() ;
my $db_error =$DBI::errstr; #It didn't work also I tried err and state
print "\nDB error $db_error\n";
while (@row = $sth->fetchrow_array( ) )
{
print "Row: @row\n";
}
I used the eval block but it is also not working.
My procedure as follows,(sample)
CREATE procedure testprocedure as
select 'one'
select 'three'
select 10/0
select 'five'
When I run the script it shows
The output is
Row: one
DBD::ODBC::st finish failed: [unixODBC][FreeTDS][SQL Server]Divide by zero error encountered. (SQL-22012) at testing.pl line 24.
DBI::db=HASH(0xbe79a0)->disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting) at testing.pl line 28.
Not displaying output even three. Displays the only one.
Therefore you could use below to handle the situation.
In above snippet
$die_messagewill contain the error message.Another option would be to set
RaiseErrorto 0 andPrintErrorto 1, so that you get thewarnings but program doesn'tdie.Source - DBI docs
You could also do it manually by