sqlserver-在PostgreSQL中使用plperl函数返回MSSQL数据



我有一个PostgreSQL数据库用于复杂的php网站(以及VB.Net/C#管理应用程序),该网站需要访问Microsoft SQL Server 2008数据库上的存储过程。选择执行此交互的方法是在PostgreSQL数据库中使用plperl函数来包装对MSSQL存储过程的访问。

我们使用perl-DBI模块来处理MSSQL数据库中的数据检索。

当涉及到perl时,我是一个新手,尤其是在PostgreSQL中使用它时。我创建了如下所示的函数来返回一组复合类型

CREATE TYPE "public"."permissions_return" AS (
  "rolename" TEXT,
  "roledescription" TEXT,
  "permissionname" TEXT,
  "permissiondescription" TEXT
);

从函数中调用的存储过程运行良好,当通过从命令行或直接从MSSQL Server运行的稍微不同的perl脚本运行时,它会返回数据。当使用时,我一直无法弄清楚如何从我的函数返回数据

SELECT * FROM fn_perltest(153);

结果总是一个空集。

CREATE FUNCTION fn_perltest(integer) RETURNS SETOF permissions_return AS $$
    use strict;
    use DBI;
    my $data_source = q/dbi:ODBC:Production/;
    my $user = q/afunkyusername/;
    my $password = q/afunkierpassword/;
    my $dbh = DBI->connect($data_source, $user, $password);
    my $sth = $dbh->prepare(q/up_DCORsel_getUserPermissionByUserID $1 ;/);
    $sth->execute();
    while ( defined ( my $row = $sth->fetchrow_array() )) {
        return next ({ 
            rolename => $row->{RoleName}, 
            roledescription => $row->{RoleDescription},
            permissionname => $row->{PermissionName}, 
            permissiondescription => $row->{PermissionDescription}
       });
    }
    return;
$$ LANGUAGE 'plperlu'

如果这有帮助的话,Postgres是在Fedora13服务器上运行的。使用带有freetds驱动程序的unixODBC配置对MSSQL Server的访问。对MSSQL服务器的访问已经过测试,并且使用isql命令行工具和一个简单的perl脚本运行良好。


任何想法都将不胜感激。我担心我可能没有头发可以拔了。

问候

Shane

这并不能直接回答您的问题,但我在尝试将一个数据库查询数据放入另一个数据库时使用了dblink。它似乎运行良好。显然,plperlu比dblink强大得多,但我对它没有任何经验(只有perl和postgresql:-)

dblink可以在postgresql的contrib目录中找到。

相关内容

  • 没有找到相关文章