Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с функцией возвращающей SETOF record / 6 сообщений из 6, страница 1 из 1
22.04.2004, 11:57
    #32491441
shRoman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
Функция упорно возращает пустой рекордсет.
Данные в искомой таблице есть. Что бы это могло значить?
Код: 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
22.04.2004, 13:15
    #32491649
Заглянул
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
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
22.04.2004, 13:27
    #32491687
shRoman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
Т.е. правильно это должно выглядеть так
Код: 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
22.04.2004, 16:51
    #32492433
Заглянул
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
Нет, правильно это должно выглядеть примерно так:
Код: 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
22.04.2004, 18:02
    #32492677
shRoman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
Создавать тип под каждый запрос как-то страннно.
Я пытался использовать функцию как аналог хранимой процедуры в 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
22.04.2004, 18:25
    #32492724
Заглянул
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с функцией возвращающей SETOF record
Можно почитать про как вернуть результат select * из процедуры или документацию, что еще лучше.\r
А упомянутая конструкция в случае большого рекордсета может оказаться медленной. Функция создает набор данных в памяти и только потом возвращает управление.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с функцией возвращающей SETOF record / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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