Du kan till stor del förenkla funktionen. (Behåller förenklad funktion för frågans skull.)
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;
Fast tekniskt sett skulle det du har i frågan också fungera - förutsatt att datatypen matchar. Gör det? Är kolumnen filedata.num
av typen integer
? Det är vad jag får ut av exemplet. På din andra fråga
Jag antog numeric
i brist på information. Minst en av dem kommer att misslyckas.
Om returtypen för funktionen inte matchar det returnerade värdet får du ett felmeddelande från PostgreSQL-funktionen. Rätt konfigurerad skulle din PostgreSQL-logg ha detaljerade felmeddelanden i det här fallet.
Vad ser du när du skapar ovanstående funktion i PostgreSQL och sedan anropar:
SELECT get_geom_difference(1);
från psql . (Gärna i samma session för att utesluta en sammanblandning av databaser, portar, servrar eller användare.)
Att anropa en enkel funktion som tar en parameter och returnerar ett skalärt värde verkar ganska enkelt. Kapitel 6.1 i PostgreSQL JDBC-manualen har ett fullständigt exempel som verkar överensstämma helt med det du har i din fråga (min expertis är dock med Postgres snarare än JDBC).