Problemas com postgresql

boa tarde,

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?

não seria melhor percorrer esse array e dentro de cada linha vc faz o que for preciso no banco?

vc tem algum exemplo?

alguém pode me ajudar!!!

vc poderia fazer algo assim:

[code]for (int i = 0; i < array.length; i++) {
		seleciona(array[i]); 
	}
}

private void seleciona(String string) {
	dao.seleciona("select codigodocumento from documentosfisicos where codigolotacaoatual = "+string);  
	
}

[/code]

lembrando isso é só uma idéia de como poderia ser feito, não é a melhor abordagem para esse problema

Você está querendo programar puramente em PL/pgSQL ou está usando qual tecnologia para programar?

estou programando em plpgsql

Veja esse exemplo: http://stackoverflow.com/questions/9783422/postgres-array-for-loop#tab-top Daí você passa o elemento como parâmetro.

Ou veja na própria documentação: http://www.postgresql.org/docs/9.1/static/plpgsql-control-structures.html

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