【问题标题】:Perl, ODBC, SQL server, Print messages returned in wrong orderPerl、ODBC、SQL server、以错误顺序返回的打印消息
【发布时间】:2016-04-12 13:45:56
【问题描述】:

我使用 perl 5.16.3、DBD::ODBC 1.47、Unix ODBC 2.2.11、freeTDS 0.91

我在下面创建了一个小程序,运行它并得到输出:

[unixODBC][FreeTDS][SQL Server]Third
[unixODBC][FreeTDS][SQL Server]Second
[unixODBC][FreeTDS][SQL Server]First

为什么这些行是倒序的?我已设置 TDSDUMP 并查看日志文件,似乎这些行以正确的顺序发送给我。

测试的代码是:

use strict;

use DBI qw(:sql_types);
use DBD::ODBC qw(:diags);

my $dbh = DBI->connect("DBI:ODBC:database", "USER", "SECRET");
$dbh->{odbc_err_handler} = \&ODBCMsgHandler;
$dbh->do("use asra_jkp" );

my $statement = "CREATE PROCEDURE testprint AS print 'First' print 'Second' print 'Third'";
$dbh->do($statement);

$statement = "EXEC testprint";
$dbh->do($statement);

$statement = "DROP PROCEDURE testprint";
$dbh->do($statement);

sub ODBCMsgHandler {
    my ($state, $msg, $native, $rc, $status) = @_;
    print "$msg\n";
}

编辑:

我在另一台机器上尝试了 perl 5.18.2 和 DBD::ODBC 1.50。在这台机器上,打印语句以正确的顺序出现。

【问题讨论】:

    标签: sql-server perl odbc


    【解决方案1】:

    我自己解决了这个问题,留下一个答案让其他人找到。

    问题在于 UnixODBC。升级 UnixODBC 到最新版本(2.3.4)解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 2019-04-03
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多