Можете значително да опростите функцията. (Запазване на опростена функция в името на въпроса.)
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;
Въпреки че, технически, това, което имате във въпроса, също ще работи - при условие, че типът данни съвпада. Наистина ли? Е колоната filedata.num
от тип integer
? Това разбирам от примера. На другия ви въпрос
Предполагах numeric
поради липса на информация. Поне един от тях ще се провали.
Ако върнатият тип на функцията не съвпада с върнатата стойност, получавате грешка от функцията PostgreSQL. Правилно конфигуриран, вашият журнал на PostgreSQL ще има подробни съобщения за грешка в този случай.
Какво виждате, когато създадете горната функция в PostgreSQL и след това извикате:
SELECT get_geom_difference(1);
от psql . (За предпочитане в една и съща сесия, за да се изключи смесване на бази данни, портове, сървъри или потребители.)
Извикването на проста функция, приемаща един параметър и връщаща една скаларна стойност, изглежда доста лесно. Глава 6.1 от ръководството за PostgreSQL JDBC има пълен пример, който изглежда напълно съвпада с това, което имате във вашия въпрос (опитът ми обаче е по-скоро с Postgres, отколкото с JDBC).