Du kan stort set forenkle funktionen. (Beholder forenklet funktion af hensyn til spørgsmålet.)
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;
Men teknisk set ville det, du har i spørgsmålet, også fungere - forudsat at datatypen matcher. Gør det? Er kolonnen filedata.num
af typen integer
? Det er det, jeg får ud af eksemplet. På dit andet spørgsmål
Jeg antog numeric
på grund af manglende information. Mindst én af dem vil mislykkes.
Hvis returtypen for funktionen ikke matcher den returnerede værdi, får du en fejl fra PostgreSQL-funktionen. Korrekt konfigureret vil din PostgreSQL-log have detaljerede fejlmeddelelser i dette tilfælde.
Hvad ser du, når du opretter ovenstående funktion i PostgreSQL og derefter kalder:
SELECT get_geom_difference(1);
fra psql . (Fortrinsvis i samme session for at udelukke en blanding af databaser, porte, servere eller brugere.)
At kalde en simpel funktion, der tager én parameter og returnerer én skalarværdi, virker ret ligetil. Kapitel 6.1 i PostgreSQL JDBC-manualen har et fuldstændigt eksempel, som synes at stemme helt overens med det, du har i dit spørgsmål (min ekspertise er dog med Postgres snarere end JDBC).