Funkci můžete značně zjednodušit. (Zachování zjednodušující funkce kvůli otázce.)
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;
I když technicky by to, co máte v otázce, fungovalo také - za předpokladu, že se datový typ shoduje. To dělá? Je sloupec filedata.num
typu integer
? To jsem pochopil z příkladu. K vaší další otázce
Předpokládal jsemnumeric
pro nedostatek informací. Alespoň jeden z nich selže.
Pokud návratový typ funkce neodpovídá vrácené hodnotě, dostanete chybu z funkce PostgreSQL. Správně nakonfigurovaný protokol PostgreSQL by v tomto případě měl podrobné chybové zprávy.
Co uvidíte, když vytvoříte výše uvedenou funkci v PostgreSQL a poté zavoláte:
SELECT get_geom_difference(1);
z psql . (Nejlépe ve stejné relaci, aby se vyloučila záměna databází, portů, serverů nebo uživatelů.)
Volání jednoduché funkce, která vezme jeden parametr a vrátí jednu skalární hodnotu, se zdá docela přímočaré. Kapitola 6.1 příručky PostgreSQL JDBC má úplný příklad, který, jak se zdá, dokonale souhlasí s tím, co máte ve své otázce (moje zkušenosti se však týkají spíše Postgres než JDBC).