begin; CREATE OR REPLACE FUNCTION person_save (in_id integer, in_salutation int, in_first_name text, in_last_name text ) RETURNS INT AS $$ DECLARE e_id int; e entity; loc location; l_id int; per person; p_id int; BEGIN select * into e from entity where id = in_id and entity_class = 3; IF NOT FOUND THEN RAISE EXCEPTION 'No entity found for ID %', in_id; END IF; select * into per FROM person WHERE entity_id = in_id; IF FOUND THEN -- do an update UPDATE person SET salutation = in_salutation, first_name = in_first_name, last_name = in_last_name WHERE entity_id = in_id AND id = per.id; ELSE -- Do an insert INSERT INTO person (salutation, first_name, last_name) VALUES (in_salutation, in_first_name, in_last_name); END IF; $$ language plpgsql; commit;