PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie rufe ich die PostgreSQL-Prozedur in Java auf?

Sie können die Funktion stark vereinfachen. (Um der Frage willen wird die vereinfachte Funktion beibehalten.)

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;

Technisch gesehen würde das, was Sie in der Frage haben, auch funktionieren - vorausgesetzt, der Datentyp stimmt überein. Macht es? Ist die Spalte filedata.num vom Typ integer ? Das entnehme ich dem Beispiel. Auf Ihre andere Frage Ich war von numeric ausgegangen aus Mangel an Informationen. Mindestens einer von ihnen wird fehlschlagen.

Wenn der Rückgabetyp der Funktion nicht mit dem zurückgegebenen Wert übereinstimmt, erhalten Sie einen Fehler von der PostgreSQL-Funktion. Bei richtiger Konfiguration würde Ihr PostgreSQL-Protokoll in diesem Fall detaillierte Fehlermeldungen enthalten.

Was sehen Sie, wenn Sie die obige Funktion in PostgreSQL erstellen und dann aufrufen:

SELECT get_geom_difference(1);

von psql . (Am besten in derselben Sitzung, um eine Verwechslung von Datenbanken, Ports, Servern oder Benutzern auszuschließen.)

Das Aufrufen einer einfachen Funktion, die einen Parameter nimmt und einen Skalarwert zurückgibt, scheint ziemlich einfach zu sein. Kapitel 6.1 des PostgreSQL JDBC-Handbuchs hat ein vollständiges Beispiel, das perfekt mit dem übereinzustimmen scheint, was Sie in Ihrer Frage haben (mein Fachwissen liegt jedoch eher bei Postgres als bei JDBC).