Utilizzando PostgreSQL 8.4, sto cercando di scrivere una funzione, e sembra che questo:Ancora un'altra stored procedure errore di sintassi - 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;
Tuttavia, non riesce in questo modo:
ERROR: syntax error at or near "IF"
LINE 4: IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
... e ho sprecato troppo tempo e caffeina a capire perché e potrei usare qualcuno con occhi nuovi per aiutarmi.
Se non è chiaro cosa sto cercando di ottenere: slave è una colonna di valori univoci. Se esiste, AGGIORNA con il master corrente. In caso contrario, INSERISCI.
UPDATE: lingua Changed a plpgsql, e ora getta:
ERROR: language "plpgsql" does not exist
UPDATE:
CREATE LANGUAGE plpgsql;
(: RISOLTO :)
Quindi è necessario 'creare linguaggio'. O 'create extension', depnding sulla versione di Postgresql. Vedi http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –
Questa guida http://www.postgresql.org/docs/8.4/static/xplang-install.html? –
@ Colin'tHart Non avevo pgplsql in pg_pltemplate, ma provare plpgsql invece (il primo da cima!) Ha fatto il trucco. Saluti per l'aiuto! – Jarmund