我有一个 perl 脚本,它执行以下操作以运行插入 stmnt 并执行故意的 RAISERROR。现在我可以看到错误已生成但错误代码错误 - SQL-42000 ,但错误诊断方法不返回任何内容。使用 $DBI::err,$DBI::errstr,$DBI::state 也不会打印正确的内容。只有 $DBI::errstr 正确出现。
$dbh->{RaiseError} = 1;
$dbh->{PrintError} = 1;
$dbh->begin_work;
eval {
$dbh->do(INSERT INTO ..);
$dbh->do (RAISERROR ('User defined error',16,1) --purposely raising error
$dbh->commit;
1;
};
if ($@) {
print $@;
print "err() ==>".$dbh->err();
print "errstr() ==>".$dbh->errstr();
print "state() ==>".$dbh->state();
$dbh->rollback or warn "rollback failed";
}
输出:
DBD::ODBC::db do failed: [unixODBC][FreeTDS][SQL Server]User defined error (SQL-42000) ..
err() =>
errstr() =>
state() =>