Требуется помощь в написании функции на Plsql

Добрый день!
Люди, разбирающиеся в plsql, помогите, пожалуйста, решить следующую задачку:
Исходные данные:
таблица А:
код | цена

таблица B:
Nгруппы | нижняя граница группы, руб | верхняя граница группы

Задача: нужно построить запрос, в котором напротив цены будет стоять номер группы, к которой она относится.
query A:
код | цена | Nгруппы |

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

имею ввиду конечно PL/pgSQL

имею ввиду конечно PL/pgSQL

> помогите, пожалуйста,

> помогите, пожалуйста, решить следующую задачку
Так, "помогите" или "сделайте за меня"?
Если второе - неинтересно. Если первое, рассказывайте что делали, что не получается в чём конкретно нужна помощь.

второй вариант :) Эх,

tbl_pr_group - таблица с ценовыми группами (группа, нижний порог, верхний порог)

вот написал функцию, но не понятно, как внутри цикла, перебирающего таблицу с группами, верхними и нижними значениями осуществить выбор нужной группы
CREATE FUNCTION price_group(price real) RETURNS integer AS $$
DECLARE
prgroup integer; /*этой переменной будет присваиваться ценовая группа и возвращаться в качестве результата*/
mviews RECORD;
BEGIN
FOR mviews IN select mgroup, lower_level, upper_level from tbl_pr_group LOOP
вот здесь нужно написать что-то вроде if price between lower_level and upper_level ==True:
return mgroup
END LOOP;
END;
$$ LANGUAGE plpgsql;

Начните с другой таблицы. В

Начните с другой таблицы.
В цикле обрабатывайте запросы вида:

SELECT mgroup FROM tbl_pr_group WHERE price BETWEEN lower_level AND upper_level

где price - это то что получаете из таблицы цен в цикле

Результат этого запроса в переменную. Считая с теми, что получили в цикле из таблицы цен вот у вас уже и нужные три значения для итоговой таблицы в конкретном шаге цикла.

все, разобрался. Большое

все, разобрался. Большое спасибо за помощь.

процедура нормально себе

процедура нормально себе работала, но сегодня вдруг выпала ошибка:
control reached end of function without RETURN

вот сама функция:
CREATE OR REPLACE FUNCTION price_group(price real)
RETURNS integer AS
$BODY$
DECLARE
/*tbl_pr_group%ROWTYPE;*/
prgroup integer; /*этой переменной будет присваиваться ценовая группа и возвращаться в качестве результата*/
mviews RECORD;
BEGIN
FOR mviews IN SELECT mgroup FROM tbl_pr_group WHERE price>=tbl_pr_group.lower_level AND price <= tbl_pr_group.upper_level LOOP
--prgroup=mgroup;
RETURN mviews.mgroup;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

С чем может быть связано возникновение ошибки?

Например с тем что у вас

Например с тем что у вас RETURN почему-то внутри цикла

о, точно. Спасибо

о, точно. Спасибо

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023