Você pode simplificar amplamente a função. (Mantendo a função simplista por causa da questão.)
CREATE OR REPLACE FUNCTION get_geom_difference()
RETURNS integer AS
$BODY$
SELECT num
FROM filedata
WHERE num = 1
LIMIT 1; -- needed if there can be more than one rows with num = 1
$BODY$ LANGUAGE SQL;
Embora, tecnicamente, o que você tem na pergunta também funcione - desde que o tipo de dados corresponda. Será? É a coluna
filedata.num
do tipo integer
? É o que deduzo do exemplo. Em sua outra pergunta
Eu estava assumindonumeric
por falta de informação. Pelo menos um deles irá falhar. Se o tipo de retorno da função não corresponder ao valor retornado, você receberá um erro da função PostgreSQL. Devidamente configurado, seu log do PostgreSQL teria mensagens de erro detalhadas neste caso.
O que você vê, quando você cria a função acima no PostgreSQL e então chama:
SELECT get_geom_difference(1);
de psql . (De preferência na mesma sessão para descartar uma confusão de bancos de dados, portas, servidores ou usuários.)
Chamar uma função simples pegando um parâmetro e retornando um valor escalar parece bem direto. Capítulo 6.1 do manual PostgreSQL JDBC tem um exemplo completo que parece concordar perfeitamente com o que você tem em sua pergunta (minha experiência é com Postgres em vez de JDBC).