Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение курсоров из PostgreSQL / 4 сообщений из 4, страница 1 из 1
23.06.2008, 15:49
    #35388747
AntonPhilimonov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение курсоров из PostgreSQL
Сообщений: 9 | оценить
Возникла проблема с получением данных, курсоров, на стороне клиента из PostgreSQL:
К примеру есть такая фуекция
CREATE OR REPLACE FUNCTION "public"."get_cursor" ("pg_catalog"."refcursor", "pg_catalog"."refcursor") RETURNS SETOF "pg_catalog"."refcursor" AS
$body$
BEGIN
OPEN $1 FOR SELECT * FROM table_1;
RETURN NEXT $1;
OPEN $2 FOR SELECT * FROM table_2;
RETURN NEXT $2;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
которая как видно возвращает два курсора
однако не получается получить результат из клиента
(пример кода на клиенте)
DataSet ds = new DataSet();
using (NpgsqlCommand cmd = new NpgsqlCommand("", conn))
{
cmd.CommandText = "Select * from Get_Cursor('a','bb')";
using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
в DataSet он записывает входные параметры функции ('a' и 'bb') а не данные взятые из таблиц
Прошу подскожите как сделать так чтобы из функции можно было получать несколько наборов данных (несколько таблиц)http://]
...
Рейтинг: 0 / 0
24.06.2008, 07:01
    #35389783
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение курсоров из PostgreSQL
Очень похоже на кальку из другой СУБД. В PostgreSQL так не делают, по крайней мере начинающие.
Скажите, что вам нужно ?
Я думаю решить можно проще.
...
Рейтинг: 0 / 0
24.06.2008, 09:59
    #35389974
AntonPhilimonov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение курсоров из PostgreSQL
Мне необходимо иметь возможность возращать из ХП несколько таблиц, для MS SQL и Firebird эти методы реализованы (как настороне сервера так и настороне клиента), а вот для с PostgreSQL все оказалось сложнее (((
...
Рейтинг: 0 / 0
24.06.2008, 10:40
    #35390074
AntonPhilimonov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение курсоров из PostgreSQL
Кому интересно решение то вот оно
(например фу-ия на сервере)
CREATE OR REPLACE FUNCTION refcursor(i) RETURNS SETOF refcursor AS

'DECLARE
ref1 refcursor;
ref2 refcursor;
BEGIN

OPEN ref1 FOR
SELECT * FROM table_1;
RETURN NEXT ref1;

OPEN ref2 FOR
SELECT * FROM table_2;
RETURN next ref2;

RETURN;
END;'
LANGUAGE plpgsql;

и на клиенете

DataSet ds = new DataSet();

using (NpgsqlDataAdapter da = new NpgsqlDataAdapter((NpgsqlCommand)sqlCommand))
{
da.SelectCommand.Transaction = (NpgsqlTransaction)sqlCommand.Connection.BeginTransaction();
da.Fill(ds);
}

return ds;
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение курсоров из PostgreSQL / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]