首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL中使用plperl函数返回MSSQL数据

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

Stack Overflow用户
提问于 2011-06-09 14:44:14
回答 1查看 584关注 0票数 1

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

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

在一般情况下,尤其是在与PostgreSQL一起使用perl时,我都是新手。我创建了如下所示的函数来返回一组复合类型

代码语言:javascript
复制
CREATE TYPE "public"."permissions_return" AS (
  "rolename" TEXT,
  "roledescription" TEXT,
  "permissionname" TEXT,
  "permissiondescription" TEXT
);

从函数内部调用的存储proc运行良好,在从命令行或直接从MSSQL运行的perl脚本中运行时返回数据。在使用以下命令时,我无法找到如何从函数返回数据:

代码语言:javascript
复制
SELECT * FROM fn_perltest(153);

结果总是一个空集。

代码语言:javascript
复制
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服务器上运行。对MSSQL的访问是使用带有freetds驱动程序的unixODBC配置的。对MSSQL服务器的访问已经过测试,使用isql命令行工具和一个简单的perl脚本可以很好地工作。

任何想法都将不胜感激。我担心我可能脱发了。

问候

沙恩

EN

回答 1

Stack Overflow用户

发布于 2011-06-09 16:12:22

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

dblink可以在postgresql的cont肋骨目录中找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6294698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档