o problema é o seguinte estou querendo fazer uma função que interaja com array em postgres sql alguém pode me ajudar?
descrição do problema:
quero criar uma fução que faça o seguinte:
tenho um update e quero que ele interaja com um array.
exemplo:
update documentosfisicos set codigolotacaoatual = array[i] where codigodocumento
in (
select codigodocumento from documentosfisicos where codigolotacaoatual = array2[i]
)
como posso fazer isso?
primeira pergunta: como declarar um array em postgres?
consegui escrever a função mas está me retornando um erro alguém sabe o que está errado?
função:
CREATE OR REPLACE FUNCTION duplicacao_de_lotacao() RETURNS VOID AS
$body$
DECLARE
lotantiga integer[3]:= 978,1436,1620;
lotnova integer[3]:= 50978,51436,51620;
contador integer:=1;
i integer:= 1;
i2 integer:= 1;
BEGIN
LOOP
contador:= contador + 1;
UPDATE documentosfisicos SET codigolotacaoatual = lotnova [i] WHERE codigodocumento
IN (
SELECT codigodocumento FROM documentosfisicos WHERE codigolotacaoatual = lotantiga [i]
);
UPDATE documentos SET codigolotacaoatual = lotnova[i] WHERE codigodocumento
IN (
SELECT codigodocumento FROM documentos WHERE codigolotacaoatual = lotantiga[i]
);
UPDATE processos SET codigolotacaoatual = lotnova[i] WHERE codigoprocesso
IN (
SELECT codigoprocesso FROM processos WHERE codigolotacaoatual = lotantiga[i]
);
UPDATE logins SET codigolotacao = lotnova[i] WHERE codigologin
IN (
SELECT codigologin FROM logins WHERE codigolotacao = lotantiga[i]
);
update lotacoes set codigofundamentacaolegal = 1 where codigolotacao = lotantiga[i];
i := i + 1;
i2 := i2 + 1;
EXIT WHEN contador > 3;
END LOOP;
END;
$body$
LANGUAGE plpgsql
Erro:
ERRO: consulta "SELECT 978,1436,1620" retornou 3 colunas
CONTEXT: função PL/pgSQL duplicacao_de_lotacao() linha 12 durante inicialização de variável local em bloco de comandos
********** Error **********
ERRO: consulta "SELECT 978,1436,1620" retornou 3 colunas
SQL state: 42601
Context: função PL/pgSQL duplicacao_de_lotacao() linha 12 durante inicialização de variável local em bloco de comandos