powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с функцией возвращающей SETOF record
6 сообщений из 6, страница 1 из 1
Проблема с функцией возвращающей SETOF record
    #32491441
shRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функция упорно возращает пустой рекордсет.
Данные в искомой таблице есть. Что бы это могло значить?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE FUNCTION enum_skill_property RETURNS SETOF record
    AS '
BEGIN
	return SELECT sp.id,sp.skill_id,sp.type,sp.name 
	FROM skill_property sp;
END
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
Проблема с функцией возвращающей SETOF record
    #32491649
Заглянул
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostgreSQL 7.4 Documentation
40.7.1.2. RETURN NEXT
RETURN NEXT expression;
When a PL/pgSQL function is declared to return SETOF sometype, the procedure to follow is slightly different. In that case, the individual items to return are specified in RETURN NEXT commands, and then a final RETURN command with no arguments is used to indicate that the function has finished executing. RETURN NEXT can be used with both scalar and composite data types; in the later case, an entire "table" of results will be returned.
...
Рейтинг: 0 / 0
Проблема с функцией возвращающей SETOF record
    #32491687
shRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. правильно это должно выглядеть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE FUNCTION enum_skill_property RETURNS SETOF record
    AS '
BEGIN
	RETURN NEXT
	SELECT sp.id,sp.skill_id,sp.type,sp.name 
	FROM skill_property sp;
	RETURN;
END
'
    LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
Проблема с функцией возвращающей SETOF record
    #32492433
Заглянул
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, правильно это должно выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Create type typ_sp as 
(id integer, skill_id integer,  "type"  varchar (20 ), name varchar (20 ));

CREATE OR REPLACE FUNCTION enum_skill_property() RETURNS SETOF typ_sp
    AS '
DECLARE
    v_rec typ_sp%ROWTYPE;
BEGIN
    FOR v_rec IN SELECT sp.id,sp.skill_id,sp.type,sp.name  FROM skill_property sp
    LOOP
        RETURN NEXT v_rec;
    END LOOP;
    RETURN;
END;
' LANGUAGE 'plpgsql';

...
Рейтинг: 0 / 0
Проблема с функцией возвращающей SETOF record
    #32492677
shRoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создавать тип под каждый запрос как-то страннно.
Я пытался использовать функцию как аналог хранимой процедуры в MS SQL.
Запрос в первом посте специально упрощен.

1. Хотелось бы понять, как выглядит синтаксис для функции возращающей именно setof record.
2. Конструкция
Код: plaintext
1.
2.
3.
4.
FOR v_rec IN SELECT *
    LOOP
        RETURN NEXT v_rec;
    END LOOP;

выглядит очень громоздкой и медленной. или только выглядит?
...
Рейтинг: 0 / 0
Проблема с функцией возвращающей SETOF record
    #32492724
Заглянул
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно почитать про как вернуть результат select * из процедуры или документацию, что еще лучше.\r
А упомянутая конструкция в случае большого рекордсета может оказаться медленной. Функция создает набор данных в памяти и только потом возвращает управление.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с функцией возвращающей SETOF record
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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