У меня есть база данных PostgreSQL, используемая для сложных веб-сайтов php (и приложений управления VB.Net/C#), которым требуется доступ для выполнения хранимых процедур в базе данных Microsoft SQL Server 2008.Метод, выбранный для выполнения этого взаимодействия, заключается в использовании функций plperl в базе данных PostgreSQL для переноса доступа к хранимым процедурам MSSQL.
Мы используем модуль perl DBI для обработки извлечения данных из базы данных MSSQL.
Я новичок, когда речь идет о Perl в целом и особенно при использовании его с PostgreSQL.Я создал функцию, показанную ниже, чтобы возвращать набор составного типа
CREATE TYPE "public"."permissions_return" AS (
"rolename" TEXT,
"roledescription" TEXT,
"permissionname" TEXT,
"permissiondescription" TEXT
);
Хранимая процедура, вызываемая из функции, работает нормально и возвращает данные при запуске через несколько иной скрипт perl, запускаемый из командной строки.или непосредственно с сервера MSSQL.Я не смог выяснить, как вернуть данные из моей функции при использовании:
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Доступ к MSSQL Server настраивается с использованием unixODBC с драйвером freetds.Доступ к серверу MSSQL был протестирован и работает нормально с использованием инструмента командной строки isql и простого сценария perl.
Любые идеи будут высоко оценены.Я обеспокоен, что у меня могут кончиться волосы.
С уважением
Шейн