Boa noite,
eu criei a seguiinte função:
create or replace function inserirPedidoProduto(
int,
int,
int,
real
)
returns boolean as $$
declare
idOcupacao2 alias for $1;
idProduto2 alias for $2;
quantidade2 alias for $3;
total2 alias for $4;
teste record;
begin
select
into teste *
from PedidoProduto
where idOcupacao = idOcupacao2 AND idProduto = idProduto2;
if not found then
insert into PedidoProduto
values (idOcupacao2, idProduto2, quantidade2, total2);
else
update PedidoProduto
set quantidade = (quantidade + quantidade2),
total = (total + total2)
where idOcupacao = idOcupacao2
AND idProduto = idProduto2;
end if;
return true;
end;
$$ language 'plpgsql';
e a classe que executa, eu já tentei com prepareCall e com prepareStatement mas os dois métodos retornam o mesmo erro.
Eis os atributos e métodos que executam a função:
private static final String inserirPedidoPratoSQL = "select inserirPedidoPrato (?, ?, ?, ?, ?)";
private static CallableStatement inserirPedidoPrato = null;
public static void inserirPedidoPrato(PedidoPrato pp) throws ClassNotFoundException, SQLException {
if (inserirPedidoPrato == null) {
inserirPedidoPrato = Conectar.open().prepareCall(inserirPedidoPratoSQL);
}
inserirPedidoPrato.setInt(1, pp.getOcupacao().getId());
inserirPedidoPrato.setInt(2, pp.getPrato().getId());
inserirPedidoPrato.setInt(3, pp.getQuantidade());
try{
inserirPedidoPrato.setInt(4, pp.getModificacao().getId());
}catch(Exception e){
//nao tem modificacao
inserirPedidoPrato.setInt(4, 0);
}
inserirPedidoPrato.setDouble(5, pp.getTotal());
inserirPedidoPrato.execute();
}
Eis o erro lançado pelo postgreSQL:
org.postgresql.util.PSQLException: ERRO: função inserirpedidoprato(integer, integer, integer, integer, double precision) não existe
Dica: Nenhuma função corresponde com o nome e os tipos de argumentos informados. Você precisa adicionar conversões de tipo explícitas.
Posição: 8
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:381)
at Persistencia.venda.materiaPrima.VendaPratoService.inserirPedidoPrato(VendaPratoService.java:69)
Linha que 29 da classe VendaPratoService é:
inserirPedidoPrato.execute();
Alguém pode me ajudar?
abrazz