2012-10-29 16 views
5

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 :)

+2

Quindi è necessario 'creare linguaggio'. O 'create extension', depnding sulla versione di Postgresql. Vedi http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –

+0

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

+0

@ 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

risposta

4

tua lingua deve essere plpgsql non sql.

+0

ha funzionato con plpgsql invece di pgplsql – Jarmund

+0

Oops, grazie !!! –

Problemi correlati