:: Не фоксом единым
PostgreSQL - unnamed portal N
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
Почитал www.sqlines.com и сделал, что бы функция возвращала refcursor. Из C# всё работает "на ура". А вот как работает из консоли СУБД - немного не нравится. В первый раз запускаю:

BEGIN;
SELECT show_cities_multiple();
FETCH ALL IN "<unnamed portal 1>";
COMMIT;

Для повторного запуска приходится либо переконнекчиваться к базе, либо менять на "<unnamed portal 2>", потом "<unnamed portal 3>" и т.д. Вопрос - а есть ли какой то другой способ? Например, как то узнать имена курсоров и открыть уже по имени?

В статье приводится пример - когда имена курсоров передаются в процедуру в качестве параметров. Увы, такой метод не подходит.
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Что есть "консоль БД"? psql? pgadmin? другая утилита?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
DBeaver, HeidiSQL, psql - без разницы. Везде эти команды работаю, везде результат (сообщение об ошибке) одинаковый.
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
S-type
...
В статье приводится пример - когда имена курсоров передаются в процедуру в качестве параметров. Увы, такой метод не подходит.
Почему ?
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
-- Procedure that returns multiple result sets (cursors)
CREATE OR REPLACE FUNCTION sdadd.show_cities_multiple() RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor; -- Declare cursor variables
ref2 refcursor;
BEGIN
ref1 := 'mycurs1'; -- Вот это надо?
OPEN ref1 FOR SELECT crf_id, name FROM CRF WHERE date_updated < '2019-01-01'; -- Open the first cursor
RETURN NEXT ref1; -- Return the cursor to the caller
ref2 := 'mycurs2';
OPEN ref2 FOR SELECT crf_id, name FROM CRF WHERE date_updated >= '2019-01-01'; -- Open the first cursor
RETURN NEXT ref2; -- Return the cursor to the caller
END;
$$ LANGUAGE plpgsql;
Ratings: 0 negative/1 positive
Re: PostgreSQL - unnamed portal N
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
Спасибо, pasha_usue. Это именно то, что нужно.

Соответственно, вызывать надо:

BEGIN;
SELECT show_cities_multiple();
FETCH ALL IN mycurs1;
FETCH ALL IN mycurs2;
COMMIT;



Исправлено 1 раз(а). Последнее : S-type, 26.08.19 09:30
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
S-type
Спасибо, pasha_usue. Это именно то, что нужно.
Соответственно, вызывать надо:

BEGIN;
SELECT show_cities_multiple();
FETCH ALL IN mycurs1;
FETCH ALL IN mycurs2;
COMMIT;

Хм... дык там PostgreSQL - How to Return a Result Set from a Stored Procedure
же об этом написано...
-- Procedure that returns multiple result sets (cursors)
CREATE OR REPLACE FUNCTION show_cities_multiple() RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor; -- Declare cursor variables
ref2 refcursor;
BEGIN
OPEN ref1 FOR SELECT city, state FROM cities WHERE state = 'CA'; -- Open the first cursor
RETURN NEXT ref1; -- Return the cursor to the caller
OPEN ref2 FOR SELECT city, state FROM cities WHERE state = 'TX'; -- Open the second cursor
RETURN NEXT ref2; -- Return the cursor to the caller
END;
$$ LANGUAGE plpgsql;
Скорее всего я не понял вопроса ?
Ratings: 0 negative/0 positive
Re: PostgreSQL - unnamed portal N
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
Разыменования курсора не хватает в функции:
ref1 := 'mycurs1';

Соответственно, присваивается автоматом "<unnamed portal N>".
Ratings: 0 negative/1 positive
Re: PostgreSQL - unnamed portal N
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
pasha_usue
Разыменования курсора не хватает в функции:
ref1 := 'mycurs1';

Соответственно, присваивается автоматом "<unnamed portal N>".
Понятно...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 4 (Гостей: 4)

© 2000-2024 Fox Club 
Яндекс.Метрика