Mit postgresql 8.4, Ich versuche, eine Funktion zu schreiben, und es sieht wie folgt aus:Noch eine andere gespeicherte Prozedur Syntaxfehler - IF-THEN-ELSE
CREATE OR REPLACE FUNCTION addorupdate(smallint, varchar(7)) RETURNS void AS
$$
BEGIN
IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
UPDATE consist SET
master = $2
where slave = $1;
ELSE
INSERT INTO consist(slave, master) VALUES ($2, $1);
END IF;
END;
$$
LANGUAGE SQL;
schlägt jedoch fehl, es wie folgt aus:
... und ich habe zu viel Zeit und Koffein verschwendet, um herauszufinden, warum und könnte jemand mit frischen Augen verwenden, um mir zu helfen.
Wenn es nicht klar ist, was ich versuche zu erreichen: Slaves ist eine Spalte mit eindeutigen Werten. Wenn es existiert, UPDATE es mit dem aktuellen Master. Wenn nicht, INSERT.
UPDATE: Geänderte Sprache plpgsql, und es wirft jetzt:
ERROR: language "plpgsql" does not exist
UPDATE:
CREATE LANGUAGE plpgsql;
(: :) RESOLVED
Dann müssen Sie 'create language'. Oder 'create extension', die auf Ihrer Postgresql-Version basiert. Siehe http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –
Hilft dies http://www.postgresql.org/docs/8.4/static/xplang-install.html? –
@ Colin'tHart Ich hatte nicht pgplsql in pg_pltemplate, aber versuchen plpgsql statt (erste von oben!) Tat den Trick. Prost für die Hilfe! – Jarmund