Вызвать хранимую функцию postgresql в java с возвратом?

Итак, у меня есть хранимая функция под названием «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;
    }

Могу ли я просто вызвать хранимую функцию в этом возвращаемом классе?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

[ОТРЕДАКТИРОВАНО: ДЕЙСТВИТЕЛЬНО РЕШЕНО ЗДЕСЬ]

Итак, в моем 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

Я не вижу здесь никакого вызова процедуры, только манипуляция с StringBuffer и последующее преобразование строки в Long.

SternK 18.12.2020 14:51

о, да, мой плохой, все еще не удается, я не добавлял этот метод в добавление нового набора, а в отредактированный, и я тестирую в добавлении, а не в отредактированном argh -_-

WildanVEP 19.12.2020 15:32

а теперь решил! можете ли вы мой отредактированный ответ?

WildanVEP 19.12.2020 17:06

Другие вопросы по теме