Пронумеровать значения
Добавлено: 10 май 2016, 12:25
Добрый день!
Стоит такая задача. Есть поле zone_code -- это некоторые группы. У каждой группы может быть одна и более подгрупп. Нужно значениям подгруппы присвоить значения в виде zone_code ||01. Тесть если номер группы 15, то номер подгруппы будет 151.
Решила попробовать это сделать через функцию, но если значений больше чем один, то она срабатывает не верно (присваивать код группы+ максимальный номер подгруппы всем подгруппам).
Подскажите в чем ошибка или возможно есть другой вариант решения вопроса?
Вот моя функция:
Стоит такая задача. Есть поле zone_code -- это некоторые группы. У каждой группы может быть одна и более подгрупп. Нужно значениям подгруппы присвоить значения в виде zone_code ||01. Тесть если номер группы 15, то номер подгруппы будет 151.
Решила попробовать это сделать через функцию, но если значений больше чем один, то она срабатывает не верно (присваивать код группы+ максимальный номер подгруппы всем подгруппам).
Подскажите в чем ошибка или возможно есть другой вариант решения вопроса?
Вот моя функция:
Код: Выделить всё
-- Function: _generate_san_zone_code_condition2()
-- DROP FUNCTION _generate_san_zone_code_condition2();
CREATE OR REPLACE FUNCTION _generate_san_zone_code_condition2()
RETURNS numeric AS
$BODY$
DECLARE
v integer;
id_code numeric;
i numeric;
k bigint;
BEGIN
for i in SELECT zone_code FROM law.sys_san_prot_zone_class group by zone_code loop
select count(*) from law.sys_san_prot_zone_class where zone_code=i into v;
if v>0 then
while (id_code is NULL) loop
begin
id_code=(select coalesce((max(id_code)+1),(i::text ||'1'::text))) from law.sys_san_prot_zone_class order by id ;
end;
end loop;
id_code= (i::text ||v::text)::numeric;
end if;
if v=0 then
id_code= (i::text ||'1')::numeric;
end if;
RETURN i;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 1000;