Digamos que eu tenha uma tabela definida da seguinte forma:
CREATE TABLE my_tbl (
id bigint,
a1 bigint[],
a2 bigint[]
);
Gostaria de criar um procedimento armazenado para acrescentar valores a a1
e a2
. Esta é a maneira correta de proceder ou existe uma maneira mais simples?
CREATE OR REPLACE FUNCTION append(
iid bigint,
next_a1 bigint,
next_a2 bigint)
DECLARE
r "my_tbl";
tmp_a1 bigint[];
tmp_a2 bigint[];
BEGIN
FOR r IN SELECT * FROM "my_tbl"
WHERE r."id" = iid
FOR UPDATE
LOOP
tmp_a1 := r.a1 || next_a1;
tmp_a2 := r.a2 || next_a2;
UPDATE my_tbl SET ( "a1", "a2" ) = ( tmp_a1, tmp_a2 )
WHERE "id" = iid;
END LOOP;
END; $$
LANGUAGE plpgsql;
Estou no Postgresql 9.2.
Você pode simplesmente fazer
Para obter uma função, basta substituir as constantes inteiras pelos parâmetros. Você pode fazer isso com segurança em uma função de linguagem de consulta (também conhecida como SQL), sem a necessidade de pl/pgsql.