Anda sebagian besar dapat menyederhanakan fungsi. (Menjaga fungsi sederhana demi pertanyaan.)
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;
Padahal, secara teknis, apa yang Anda miliki dalam pertanyaan juga akan berfungsi - asalkan tipe datanya cocok. Melakukannya? Apakah kolom filedata.num
bertipe integer
? Itulah yang saya kumpulkan dari contoh. Tentang pertanyaan Anda yang lain
Saya berasumsinumeric
karena kurangnya informasi. Setidaknya salah satu dari mereka akan gagal.
Jika tipe pengembalian fungsi tidak cocok dengan nilai yang dikembalikan, Anda mendapatkan kesalahan dari fungsi PostgreSQL. Dikonfigurasi dengan benar, log PostgreSQL Anda akan memiliki pesan kesalahan terperinci dalam kasus ini.
Apa yang Anda lihat, ketika Anda membuat fungsi di atas di PostgreSQL dan kemudian memanggil:
SELECT get_geom_difference(1);
dari psql . (Sebaiknya dalam sesi yang sama untuk mengesampingkan campuran database, port, server, atau pengguna.)
Memanggil fungsi sederhana yang mengambil satu parameter dan mengembalikan satu nilai skalar tampaknya cukup mudah. Bab 6.1 dari manual PostgreSQL JDBC memiliki contoh lengkap yang tampaknya sangat sesuai dengan apa yang Anda miliki dalam pertanyaan Anda (Namun, keahlian saya adalah dengan Postgres daripada JDBC).