Puede simplificar en gran medida la función. (Manteniendo la función simplista por el bien de la pregunta).
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;
Aunque, técnicamente, lo que tiene en la pregunta también funcionaría, siempre que el tipo de datos coincida. ¿Lo hace? Es la columna filedata.num
de tipo integer
? Eso es lo que deduzco del ejemplo. En su otra pregunta
Estaba asumiendo numeric
por falta de información. Al menos uno de ellos fallará.
Si el tipo de devolución de la función no coincide con el valor devuelto, obtendrá un error de la función de PostgreSQL. Configurado correctamente, su registro de PostgreSQL tendría mensajes de error detallados en este caso.
¿Qué ves cuando creas la función anterior en PostgreSQL y luego llamas:
SELECT get_geom_difference(1);
de psql . (Preferiblemente en la misma sesión para descartar una confusión de bases de datos, puertos, servidores o usuarios).
Llamar a una función simple que toma un parámetro y devuelve un valor escalar parece bastante sencillo. Capítulo 6.1 del manual JDBC de PostgreSQL tiene un ejemplo completo que parece estar de acuerdo perfectamente con lo que tiene en su pregunta (sin embargo, mi experiencia es con Postgres en lugar de JDBC).