来自perl DBI

时间:2017-03-29 15:24:24

标签: perl sybase

我从perl脚本连接到sybase 12并调用storedprocs,我收到以下警告

DBD::Sybase::db prepare failed: Server message number=2401 severity=11 state=2 line=0 server=SERVER_NAME text=Character
set conversion is not available between client character set 'utf8' and server character set 'iso_1'.
Server message number=2411 severity=10 state=1 line=0 server=SERVER_NAME text=No conversions will be done.
at line 210.

现在,我明白这些只是警告,我的过程工作得非常好,但是我在一个循环中调用我的存储过程并且整天都因此在我的日志文件中创建了很多警告消息,导致整个进程运行速度比预期慢一点。有人可以帮助我,我怎么能抑制这些?

1 个答案:

答案 0 :(得分:1)

您可以使用回调来处理要忽略的邮件。请参阅DBD::Sybase docs。以下内容源自文档。您可以指定要忽略的消息编号。

%blocked_msgs = map { $_ => 1 }  ( 2401, 2411 );
sub err_handler {
  my($err, $sev, $state, $line, $server, $proc, $msg, $sql, $err_type) = @_;

   if ( exists $blocked_msgs{$err} ) { # it's a blocked message
     return 0;    # This is not an error
   }
   return 1;
}

您可以使用它:

$dbh = DBI->connect('dbi:Sybase:server=troll', 'sa', '');
$dbh->{syb_err_handler} = \&err_handler;
$dbh->do("exec someproc");
$dbh->disconnect;