【发布时间】:2017-05-16 08:58:40
【问题描述】:
我正在尝试将运行时 mssql 错误存储在变量中并继续处理所有其他数据。
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";
}
我使用了 eval 块,但它也不起作用。
我的程序如下,(示例)
CREATE procedure testprocedure as
select 'one'
select 'three'
select 10/0
select 'five'
当我运行脚本时它显示
输出是
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.
即使three 也不显示输出。显示唯一的一个。
【问题讨论】:
-
如果您想在过程本身中执行此操作,您可以使用 Try..Catch 块进行异常处理。请参阅此处的文档
https://msdn.microsoft.com/en-us/library/ms175976.aspx -
您想继续执行脚本并仅捕获错误吗?
-
@AbhiNickz 是的,我想继续脚本。
-
@AbhiNickz 我试过了,但没用。报同样的错误。
标签: sql-server perl dbi