2012-10-29 16 views
5

PostgreSQL 8.4, próbuję napisać funkcję, a wygląda to tak:Jeszcze inna procedura przechowywana błąd składni - 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; 

Jednak nie jest on tak:

ERROR: syntax error at or near "IF" 
LINE 4: IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN 

... i marnowałem zbyt dużo czasu i kofeiny na zastanawianie się, dlaczego mógłbym użyć kogoś o świeżych oczach, aby mi pomóc.

Jeśli nie jest jasne, co próbuję osiągnąć: Niewolnicy to kolumna o unikalnych wartościach. Jeśli istnieje, UPDATE go z bieżącym wzorcem. Jeśli nie, INSERT.

UPDATE: Zmieniono język plpgsql, a teraz rzuca:

ERROR: language "plpgsql" does not exist 

UPDATE:

CREATE LANGUAGE plpgsql; 

(: ZDECYDOWANE :)

+2

Następnie należy "utworzyć język". Lub 'create extension', deportowanie w twojej wersji Postgresql. Zobacz http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –

+0

Czy ten http://www.postgresql.org/docs/8.4/static/xplang-install.html pomaga? –

+0

@ Colin'tHart Nie miałem pgplsql w pg_pltemplate, ale próba użycia plpgsql (pierwszy z góry!) Rozwiązała problem. Pozdrawiam za pomoc! – Jarmund

Odpowiedz

4

język musi być plpgsql nie sql.

+0

pracował z plpgsql zamiast pgplsql – Jarmund

+0

Ups, thanks !!! –

Powiązane problemy