powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Возвращение RecordSet из процедуры
8 сообщений из 8, страница 1 из 1
Возвращение RecordSet из процедуры
    #32818798
Привет всем!

Сорри но только в процессе изучения и всех фишек еще не выучил.

Вопрос такой как возвратить RecordSet из процедуры при этом не создавая типа.

ТОесть сейчас я делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE TYPE rs_test AS (
	Field_1 int4,
	Field_2 int4
);

CREATE OR REPLACE FUNCTION prc_test(int4)
 RETURNS SETOF rs_test AS
'
DECLARE 
	vP_Value ALIAS FOR $1;

	vSQL text;
	vRS_Result rs_test%ROWTYPE;
BEGIN
	
	vSQL := \'
		SELECT 
			Field_1, Field_2
		FROM 
			tbTable
		WHERE
			PA.InxField = \' || vP_Value ;
		
	FOR vRS_Result IN EXECUTE vSQL LOOP
		RETURN NEXT vRS_Result;
	END LOOP;

	RETURN ;
END
'LANGUAGE 'plpgsql' IMMUTABLE SECURITY DEFINER;

а хотелосьбы так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION prc_test(int4)
 RETURNS ?????????????/ AS
'
DECLARE 
	vP_Value ALIAS FOR $1;
BEGIN
	
	SELECT 
		Field_1, Field_2
	FROM 
		tbTable
	WHERE
		PA.InxField = vP_Value ;
		
	RETURN ;
END
'LANGUAGE 'plpgsql' IMMUTABLE SECURITY DEFINER;

Всем спасибо !!
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32819086
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я знаю - тип объявлять обязательно.
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32819253
Порылся в форуме. Судя из того, что народ пишет, ДА нужно объявлять тип.

Жаль, разочаровал меня Постгре.

Спасибо всем.
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32819512
MaximZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий ГолубевПорылся в форуме. Судя из того, что народ пишет, ДА нужно объявлять тип.

Жаль, разочаровал меня Постгре.

Спасибо всем.

Ну, это не самая большая причина для разочарования. Посмотрим что в восьмой версии будет.
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32819654
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если возвращать RECORD то можно обрабатывать выборку как
select * from f() as (text my_text,int4 my_int)
где перечисляете все поля рекорда с типами. неудобно но работает, и без типов
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32824036
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем объявление типа так плохо?
В Оракле, по-моему, тоже обязательно объявлять возвращаемый тип.

Порой, когда меняется структура БД, типы ох как помогают...
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32824324
gamych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий ГолубевПривет всем!

Сорри но только в процессе изучения и всех фишек еще не выучил.

Вопрос такой как возвратить RecordSet из процедуры при этом не создавая типа.

Насколько я понимаю, ты хочешь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
... returns setof record as '
declare r record;
...
begin
   ... loop
     select into r ...
     return next r;
   end loop;
   ...
   return;
end;
' ...
...
Рейтинг: 0 / 0
Возвращение RecordSet из процедуры
    #32827593
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин РоманА чем объявление типа так плохо?
В Оракле, по-моему, тоже обязательно объявлять возвращаемый тип.

Порой, когда меняется структура БД, типы ох как помогают...

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


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