Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / выходные параметры функции / 8 сообщений из 8, страница 1 из 1
28.08.2008, 17:11
    #35511526
nikolaich2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
Подскажите возможно ли вернуть из одной функции результат работы оператора SELECT и отдельные выходные параметры. Т.е. есть желание получить результирующий набор данных, и
текстовое сообщение в выходном параметре.
...
Рейтинг: 0 / 0
29.08.2008, 10:45
    #35512439
nikolaich2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
Я так понял, что никак.
...
Рейтинг: 0 / 0
29.08.2008, 12:06
    #35512734
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
nikolaich2Я так понял, что никак.
Не понятно, что вы хотите.
Если 2 набора данных, то копайте в документации в сторону курсоров (конкретно, возврат нескольких курсоров). Если отдельный отладочный поток, то RAISE.
...
Рейтинг: 0 / 0
29.08.2008, 12:07
    #35512746
chAlx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
Код: plaintext
1.
2.
select fld1, fld2 from table into res.param1, res.param2;
res.param3 = 'OK';
return res;
Можно ещё отдельный тип под res создать и возвращать из функции его.
...
Рейтинг: 0 / 0
29.08.2008, 12:51
    #35512918
nikolaich2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
Kruchinin Pahan nikolaich2Я так понял, что никак.
Не понятно, что вы хотите.
Если 2 набора данных, то копайте в документации в сторону курсоров (конкретно, возврат нескольких курсоров). Если отдельный отладочный поток, то RAISE.

Возможно это прояснит ситуацию.
Первая функци возращает набор данных:
Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE FUNCTION ShowUnitOfMeasure() RETURNS SETOF UnitOfMeasure AS 
	$$
	SELECT UnitOfMeasureID, UnitOfMeasureName
	FROM UnitOfMeasure 
	$$ 
LANGUAGE SQL;

Вторая вставляет запись в таблицу и если возникли ошибки то возращает код и текст ошибки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR REPLACE FUNCTION InsUnitOfMeasure (InUnitOfMeasureName varchar( 50 ),
         OUT textError text, OUT codeError int) RETURNS record AS $$ 

	BEGIN
		IF ($ 1  ISNULL) THEN
			RAISE EXCEPTION 'Отсутствует входное значение!';		
		END IF;
		INSERT INTO UnitOfMeasure (UnitOfMeasureName)
		VALUES ($ 1 );
		codeError =  0 ;

	EXCEPTION
		WHEN OTHERS THEN
			IF sqlstate = 'P0001' THEN
				textError := sqlerrm ;
				codeError :=  1 ;
			ELSE 
				textError := sqlerrm || '  ' || sqlstate;
				codeError :=  2 ;			
			END IF;			
	END;
$$ LANGUAGE plpgsql;

Т.е. я хочу, чтобы в перевой функции можно было добавить выходные параметры, как это сделано во второй функции.
...
Рейтинг: 0 / 0
29.08.2008, 13:11
    #35512981
chAlx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
nikolaich2Т.е. я хочу, чтобы в перевой функции можно было добавить выходные параметры, как это сделано во второй функции.
Про это я и писал, остаётся добавить тип и вперёд:
Код: plaintext
1.
2.
3.
... RETURNS my_res_type AS
'declare res my_res_type%rowtype;
...
' LANGUAGE 'plpgsql'
Только непонятно, как функция, возвращающая набор (SETOF) данных, должна выдавать ещё и "статичный" результат. В каждой возвращаемой записи что ли?
...
Рейтинг: 0 / 0
29.08.2008, 13:23
    #35513029
nikolaich2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
chAlx
Только непонятно, как функция, возвращающая набор (SETOF) данных, должна выдавать ещё и "статичный" результат. В каждой возвращаемой записи что ли?

В этом и смысл вопроса.
Извите если вопрос глупый, но я сейчас пытаюсь перейти с MS SQL на PostgreSQL, а в MS SQL такой вариант проходил. Т.е. возращаешь набор данных, и какой-либо код через оператор Return.
Что то типа этого:
Код: plaintext
1.
2.
3.
4.
5.
CREATE PROC ShowObject 
AS
SELECT ObjectID, ObjectName 
FROM Object
RETURN( 0 )
GO
В этом случае на клиенте можно получить набор данных и значение, которое возвращется в операторе RETURN. В данной процедуре 0.
...
Рейтинг: 0 / 0
29.08.2008, 14:36
    #35513230
chAlx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выходные параметры функции
nikolaich2возращаешь набор данных, и какой-либо код через оператор Return
Не встречал такого: return на то и сделан, чтобы возвращать результат.

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


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