Ola a todos os participantes da lista,

Gostaria de fazer uma função que:
 1. verifica-se se um determinado valor já existe numa tabela
 2. se sim, que me devolva o id desse registo
 3. se não, que faca o insert e em seguida devolva o id resultante

Escrevi a seguinte código mas falta-me saber como recuperar o resultado do EXECUTE. Alguém me pode ajudar? Obrigado.

CREATE OR REPLACE FUNCTION "Attribute".fun_insert_attribute(name text, description text, type text)
  RETURNS text AS
$BODY$
DECLARE
    attribute_id integer;
    n integer;
BEGIN
    -- verifica se já existe
EXECUTE 'SELECT count(*) FROM "Attribute"."Attribute" WHERE "Name" ILIKE '||name||';'
    -- se já existe, conhecer o id
    IF n > 1 THEN
EXECUTE 'SELECT "AttributeId" FROM "Attribute"."Attribute" WHERE "Name" ILIKE '||name||';'
    -- se não existe, inserir e conhecer o id
    ELSE
EXECUTE 'INSERT INTO "Attribute"."Attribute"("Name","Description",version_type) VALUES('||name||','||description||','||type||') RETURNING "AttributeId";'
    END IF;
RETURN attribute_id;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Os melhores cumprimentos,

--
Eloi
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a