Функция с ошибками. Или, возможно, структура БД поменялась и сейчас уже не то.
1. supermag.smgetextrachargeclass(p_a, loc) - в этой функции второй аргумент должен быть не код места хранения, а код цены
2. select extracharge into cl_name from supermag.smextracharge where article=p_a and pricetype = pt; - возникает исключение NO_DATA_FOUND, и функция всегда возвращает NULL, если у карточки нет инд. наценки. Впрочем, если функция только для карточек у которых инд. наценка есть, то и так будет работать.
Исправленный вариант:
SQL код:
CREATE OR REPLACE
function extracharge2 ( p_a in varchar2, loc in integer )
return varchar2
is
cl_name varchar2(100) default null;
cl_name2 varchar2(100) default null;
pt integer(3) default null;
begin
select pricetype into pt from supermag.smlocprices where locid = loc and (bitand(flags, 2) = 2);
select max(extracharge) into cl_name from supermag.smextracharge where article=p_a and pricetype = pt;
if cl_name is not null then
cl_name2 := supermag.smgetextrachargeclass(p_a, pt);
if cl_name = cl_name2 then
cl_name := null;
else
cl_name := cl_name || ' (' || cl_name2 || ')';
end if;
end if;
return cl_name;
end;
/
commit;