2012-10-29 13 views
5

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

+2

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 –

+0

Hilft dies http://www.postgresql.org/docs/8.4/static/xplang-install.html? –

+0

@ 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

Antwort

4

Ihre Sprache mussseinnicht sql.

+0

arbeitete mit plpgsql anstelle von pgplsql – Jarmund

+0

Ups, danke !!! –