Estou com problema no uso de uma function criada no MySQL através de código que usa a classe JdbcTemplate do Spring.
Quando testo a function diretamente no Workbench funciona corretamente, retornando true ou false de acordo com as entradas passadas. Porém, quando tento obter o resultado via código Java sempre retorna false, o que me leva a crer se tratar de alguma falha na conversão de tipos.
Gostaria da ajuda dos colegas para me ajudar a descobrir o motivo da falha. Porque a variável ‘result’ sempre está como false?
- código Java
(...)
Object[] args = new Object[4];
int[] tipos = new int[4];
args[0] = ag.getId(); tipos[0] = Types.INTEGER;
args[1] = p.getId(); tipos[1] = Types.INTEGER;
args[2] = ano.getAno(); tipos[2] = Types.INTEGER;
args[3] = total.getTotal(); tipos[3] = Types.INTEGER;
boolean result = (Boolean)getJdbcTemplate().queryForObject("SELECT COMPARA_QTDE_EMPRESA (?, ?, ?, ?)"), args, tipos, Boolean.class);
- function
CREATE DEFINER=`root`@`localhost` FUNCTION `COMPARA_QTDE_EMPRESA`(AG INT, P INT, ANO INT, AINSERIR INT) RETURNS tinyint(1)
DETERMINISTIC
BEGIN
DECLARE TOTAL_EMPRESA_PESQUISA INT;
DECLARE TOTAL_EMPRESA_AGENTE INT;
SELECT IF(COUNT(*), EP.TOTAL, 0) INTO TOTAL_EMPRESA_PESQUISA
FROM CTRLPRODUCAO.EMPRESA_PESQUISA EP
WHERE EP.AGENCIA = AG
AND EP.PESQUISA = P
AND EP.ANO = ANO;
SELECT IFNULL(SUM(EA.TOTAL), 0) INTO TOTAL_EMPRESA_AGENTE
FROM CTRLPRODUCAO.EMPRESA_AGENTE EA
WHERE EA.AGENCIA = AG
AND EA.PESQUISA = P
AND EA.ANO = ANO;
RETURN IF(TOTAL_EMPRESA_PESQUISA = 0, FALSE,(TOTAL_EMPRESA_PESQUISA < (TOTAL_EMPRESA_AGENTE) + AINSERIR));
END