Ich versuche eine Funktion mit PostgreSQL zu verwenden, um einige Daten zu speichern. Hier ist das Skript erstellen:So rufen Sie eine Funktion, PostgreSQL
-- Function: "saveUser"(integer, character varying, character varying, character varying, character varying, character varying)
-- DROP FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying);
CREATE OR REPLACE FUNCTION "saveUser"("pUserID" integer, "pName" character varying, "pLastName" character varying, "pUserName" character varying, "pPassword" character varying, "peMail" character varying)
RETURNS boolean AS
$BODY$
BEGIN
SELECT 1
FROM "USERS"
WHERE "userID" = $1;
IF FOUND THEN
UPDATE "USERS"
SET "name" = $2,
"lastName" = $3,
"userName" = $4,
"password" = $5,
"eMail" = $6
WHERE "userID" = $1;
ELSE
INSERT INTO "USERS"
("name", "lastName", "userName", "password", "eMail")
VALUES
($2, $3, $4, $5, $6);
END IF;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying) OWNER TO postgres;
PostreSQL Dokumentation besagt, dass eine Funktion aufzurufen, die keine Suchresultates zurückkehrt, ist es ausreichend, nur seinen Namen und Eigenschaften zu schreiben. Also versuche ich, die Funktion wie folgt zu nennen:
"saveUser"(3, 'asd','asd','asd','asd','asd');
Aber ich habe den Fehler unten:
ERROR: syntax error at or near ""saveUser""
LINE 1: "saveUser"(3, 'asd','asd','asd','asd','asd')
^
********** Error **********
ERROR: syntax error at or near ""saveUser""
SQL state: 42601
Character: 1
ich andere Funktionen haben, die eine Ergebnismenge zurück. Ich benutze SELECT * FROM "fnc"(...)
um sie anzurufen und es funktioniert. Warum erhalte ich diesen Fehler?
EDIT: I pgAdmin III Abfrage-Tool bin mit und versuchen, die SQL-Anweisungen dort auszuführen.
Damit bekomme ich den Fehler; "FEHLER: Abfrage hat kein Ziel für Ergebnisdaten". Ich frage mich, ob dieser Fehler etwas damit zu tun hat, dass ich einen booleschen Wert zurückgeben möchte? –
Ich habe das mit einer anderen Funktion versucht, die void zurückgibt und es funktioniert, aber was, wenn ich einen boolean zurückgeben wollte? –
Erkan: Versucht, die beiden Antworten zu kombinieren? I.e. Ihr Aufruf ist falsch und Sie geben nichts für eine Funktion zurück, von der erwartet wird, dass sie zurückkehrt. Außerdem, warum haben Sie Mixed-Case-Bezeichner, die Sie ständig angeben müssen? –