crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Значение, возвращаемое функцией
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
xls Дата 31.1.2011, 17:28
 
Цитата(YarikRock @ 15.12.2010, 20:00) *
Здравствуйте, имею функцию, пробовал возращаемое значение table и собственного типа getSensorValues.
Возращает не так

Попробуй выбрать из типа как в http://sqle.ru/index.php/PostgreSQL/Array/...y_Column_Select
YarikRock Дата 15.12.2010, 20:00
  Здравствуйте, имею функцию, пробовал возращаемое значение table и собственного типа getSensorValues.
Возращает не так
time_t | value
--------+-------
105 | 117
2054 | 676 , а так

getsensorvalues
-----------------
(105,117)
(2054,676)

При вызове этой функции из программы результат выдает не как пары значений 105, 117, а как одну строку "(105,117)"
Подскажите где я ошибся, пожалуйста.

CREATE OR REPLACE FUNCTION getSensorValues(firstTime integer, lastTime integer, step integer, insensorid integer)
returns setof getSensorType as --table(otime_t integer, ovalue float8) as
$$
declare
firstTime integer := $1;
counter integer := 0;
localStep integer := $3/10 + 1;
getSens getSensorType;
occ record;
begin
  while firstTime < $2 + 1
  loop
  for occ in select time_t, value from sensors
  where sensorsid = $4 and time_t = (select min(time_t) from sensors
  where sensorsid = $4 and time_t >= (firstTime - (localStep/2) + (localStep*counter))
  and time_t < (firstTime + (localStep/2) + (localStep*counter)))
  loop
  getSens.otime_t := occ.time_t;
  getSens.ovalue := occ.value;
  return next getSens;
  end loop;
  firstTime := firstTime + $3;

  if (getSens.otime_t is NULL) then
    if (getSens.ovalue is NULL) then
      if (counter < 9) then
    firstTime := firstTime - $3;
    counter := counter + 1;
      end if;
    end if;
  end if;

  end loop;
return;
end;
$$
language 'plpgsql';

------------------------------------------------

create type getSensorType as
(
otime_t integer,
ovalue float8
);


Забыл написать, СУБД PostgreSQL, язык plpgsql.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 21:56