Seguinte estou fazendo uma função na qual preciso comparar os valores de uma linha com a sua subsequente. O proplema é que não consigo pegar o valor da próxima linha. Já tentei usar cursores mas não consigo fazer com q rode com scroll, tentei também com id + 1, porém o id não é sequencial. Fiz uma função q varre todo o banco procurando por registros duplicados, resultado: demora 3 mil anos pra realizar :o).
Se alguém já teve algum problema parecido agradeço se ajudar, segue o trecho do código:
----------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION limpa(timestamp, timestamp) RETURNS void AS
$BODY$
DECLARE
inicio ALIAS FOR $1;
fim ALIAS FOR $2;
rad RECORD;
conta RECORD;
delimitador RECORD;
destino RECORD;
sql varchar;
sqlconta varchar;
inserir varchar;
gw varchar;
cliente varchar;
BEGIN
sql := 'SELECT * FROM conta WHERE ( ';
sql := sql || 'inicio >= \'' || inicio || '\' and ';
sql := sql || 'inicio < \'' || fim || '\' ) ORDER BY acctid limit 4 ';
FOR radacct IN EXECUTE sql LOOP
sqlconta := 'SELECT * FROM conta WHERE ( acctid = '|| ( rad.id + 1) ||' )';--pega o id + 1 e tá errado :o(
FOR conta IN EXECUTE sqlconta LOOP
END LOOP;
IF( ( radacct.destino = conta.destino ) AND ( radacct.tempo = conta.tempo ) AND ( radacct.cliente = conta.cliente )
AND ( substr( radacct.inicio, 1, 19 ) = substr( conta.inicio, 1, 19 ) ) )
THEN BEGIN
IF ( host(radacct.gateway) IS NULL )THEN
gw := host('0.0.0.0');
else
gw := host(radacct.gateway);
END IF;
inserir := 'INSERT INTO registrosduplicados VALUES ( ...';
IF( inserir IS NOT NULL )then
BEGIN
EXECUTE inserir;
EXECUTE 'DELETE FROM conta WHERE id = ' || rad.id;
EXIT;
END;
END IF;
END;
END IF;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql'
------------------------------------------------------------------------------------------------------------------------
[]'s
Tácio Vilela
_______________________________________________ Grupo de Usuários do PostgreSQL no Brasil Antes de perguntar consulte o manual http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em: http://pgfoundry.org/mailman/listinfo/brasil-usuarios
