Итак, у меня есть хранимая функция под названием «get_ss_org_struct_ver_id», которая возвращает двойную точность.
CREATE OR REPLACE FUNCTION public.get_ss_org_struct_ver_id(business_id double precision)
RETURNS double precision
LANGUAGE plpgsql
AS $function$
DECLARE
v_org_struct_ver_id double precision;
BEGIN
select internalid into v_org_struct_ver_id from WOT_ORG_STRUCTURE_VER where now() between date_from and date_to and business_group_id = business_id;
RETURN v_org_struct_ver_id;
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END;
$function$
;
Дело в том, что мне нужно использовать эту хранимую процедуру в моей функции set:
CoreOrgStructure coreOrgStructure = new CoreOrgStructure();
coreOrgStructure.setOrgVerId(get_ss_org_struct_ver_id(businessGroupId));
Мне нужно получить значение businessGroupId, но я не знаю, как вызвать функцию. На данный момент я только что создал этот нулевой класс возврата, например:
private Long get_ss_org_struct_ver_id(Long businessGroupId) {
// TODO Auto-generated method stub
return null;
}
Могу ли я просто вызвать хранимую функцию в этом возвращаемом классе?
[ОТРЕДАКТИРОВАНО: ДЕЙСТВИТЕЛЬНО РЕШЕНО ЗДЕСЬ]
Итак, в моем bean:
coreOrgStructure.setOrgVerId(coreOrgUnitsService.getOrgVerIdByBusinessGroupId(businessGroupId));
и в этой службе getOrgVerIdByBusinessGroupId(businessGroupId) она проходит через мой DAO:
@Override
public Long getOrgVerIdByBusinessGroupId(Long orgBusinessGroupId) {
StringBuffer sbQuery = new StringBuffer();
sbQuery.append(" select get_ss_org_struct_ver_id(:orgBusinessGroupId) ");
Query result = getSession().createSQLQuery(sbQuery.toString());
result.setLong("orgBusinessGroupId", orgBusinessGroupId);
Number results = (Number) result.uniqueResult();
if (results == null) {
results = 0;
}
return (long) results.intValue();
}
и теперь это действительно сработало! XD
о, да, мой плохой, все еще не удается, я не добавлял этот метод в добавление нового набора, а в отредактированный, и я тестирую в добавлении, а не в отредактированном argh -_-
а теперь решил! можете ли вы мой отредактированный ответ?
Я не вижу здесь никакого вызова процедуры, только манипуляция с
StringBuffer
и последующее преобразование строки вLong
.