没有与给定名称和参数类型匹配的函数,Postgresql和SpringBoot

xkrw2x1b  于 2022-12-21  发布在  Spring
关注(0)|答案(1)|浏览(154)

在我的postgres DB中有以下函数:

CREATE OR REPLACE FUNCTION schema1.ven_totais_nfes(data_inicial date, data_final date, setor_usuario text[])
 RETURNS TABLE(status character varying, quantidade bigint, valor numeric)
 LANGUAGE plpgsql
 SET search_path TO 'schema1', '$user', 'public'
AS $function$
 declare
    item record;
begin
    [...]

执行如下脚本:

select * from ven_totais_nfes('2022-12-01', '2022-12-31', array['aef4786e-7d99-4fdc-a20a-4da11c168eb2'])

返回我想要的结果,但是从springboot后端调用函数,它在函数调用时中断。

public List<NFeTotaisViewDto> findTotais(Date dataInicial, Date dataFinal, List<UUID>setorUsuario) {
        Query query = entityManager.createNativeQuery("select * from ven_totais_nfes(:dataInicial, :dataFinal, :setorUsuario)");
        query.setParameter("dataInicial", dataInicial);
        query.setParameter("dataFinal", dataFinal);
        query.setParameter("setorUsuario", setorUsuario);

错误:函数ven_totais_nfes(未知,未知,uuid)不存在Dica:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。

6tdlim6h

6tdlim6h1#

问题是传递给函数的数组类型,我解决了使用for迭代抛出数组中的所有itens,并作为字符串传递给函数中的text[]类型。

public List<NFeTotaisViewDto> buscarTotais(Date dataInicial, Date dataFinal, List<UUID> setores) {
        AtomicReference<String> stringSetores = new AtomicReference<>("{");

        for (int i = 0; i < setores.size(); i++){
            stringSetores.set(stringSetores + setores.get(i).toString());
            if (i != setores.size() - 1){
                stringSetores.set(stringSetores + ",");
            } else {
                stringSetores.set(stringSetores + "}");
            }
        }
        return getRepository().findTotais(dataInicial, dataFinal, stringSetores.get());

相关问题