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 :)
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 –
Czy ten http://www.postgresql.org/docs/8.4/static/xplang-install.html pomaga? –
@ 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