使用PostgreSQL中的plperl函数返回MSSQL数据

问题描述 投票:1回答:1

我有一个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
);

从函数内部调用的存储过程可以正常工作,并在从命令行运行稍微不同的perl脚本或直接从MSSQL Server运行时返回数据。使用时,我无法弄清楚如何从我的函数返回数据:

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正在Fedora 13服务器上运行。使用unixODBC和freetds驱动程序配置对MSSQL Server的访问。已经测试了对MSSQL服务器的访问,并使用isql命令行工具和一个简单的perl脚本正常工作。


任何想法将不胜感激。我担心我可能会用完头发拉出去。

问候

Shane

sql-server perl postgresql dbi plperl
1个回答
1
投票

这不直接回答您的问题,但我在尝试在另一个数据库中拥有一个数据库查询数据时使用了dblink。它似乎运作良好。明显的plperlu比dblink有更多的功能,但我没有任何经验(只是perl和postgresql :-)

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

© www.soinside.com 2019 - 2024. All rights reserved.