U kunt de functie grotendeels vereenvoudigen. (De simplistische functie behouden omwille van de vraag.)
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;
Hoewel, technisch gezien, zou wat je in de vraag hebt ook werken - op voorwaarde dat het gegevenstype overeenkomt. Doet het? Is de kolom filedata.num
van het type integer
? Dat haal ik uit het voorbeeld. Op je andere vraag
Ik ging ervan uit numeric
wegens gebrek aan informatie. Minstens één van hen zal falen.
Als het retourtype van de functie niet overeenkomt met de geretourneerde waarde, krijgt u een foutmelding van de PostgreSQL-functie. Als uw PostgreSQL-logboek correct is geconfigureerd, bevat dit in dit geval gedetailleerde foutmeldingen.
Wat zie je als je de bovenstaande functie in PostgreSQL maakt en vervolgens aanroept:
SELECT get_geom_difference(1);
van psql . (Bij voorkeur in dezelfde sessie om verwisseling van databases, poorten, servers of gebruikers uit te sluiten.)
Het aanroepen van een eenvoudige functie met één parameter en het retourneren van één scalaire waarde lijkt vrij eenvoudig. Hoofdstuk 6.1 van de PostgreSQL JDBC-handleiding heeft een volledig voorbeeld dat perfect lijkt overeen te komen met wat u in uw vraag heeft (mijn expertise ligt echter bij Postgres in plaats van JDBC).