Update com condição while

20/01/2014

0

Tenho a seguinte situação:

id nome sequencia
5899 nome1 1
1235 nome1 1
1264 nome1 2
7899 nome1 3
1379 nome1 4
2809 nome2 1
1455 nome2 1
1244 nome2 2
4567 nome2 3
7894 nome2 4

O número 1 no campo sequência está duplicado em vários casos no meu banco.
Preciso reordená-los no update no bd para cada nome e obter:

5899 nome1 1
1235 nome1 2
1264 nome1 3
7899 nome1 4
1379 nome1 5


Não estou conseguindo encaixar o loop no update....

Cássia Freitas

Cássia Freitas

Responder

Posts

23/01/2014

Jair N.

Boa Tarde, já me encontrei em situação semelhante, veja abaixo um procedimento adotado

-- Início de procedimento para a tua_tabela...

-- 1º) Criar um arquivo temporário de seqüêncial nome "seq_id" ...

CREATE TEMPORARY SEQUENCE seq_id
INCREMENT 1
MINVALUE 1
NO MAXVALUE
START 1
CACHE 1;

-- 2º) Alterar o valor do arquivo temporário começando o seqüêncial neste exemplo com o número inicial é "120".se necessário for..

ALTER SEQUENCE seq_id START 120;

-- 3º) Atualizado a tabela de "situação" o campo "id", onde neste exemplo o campo está entre os números "119" e "500", com a sequência informada anteriormente...

UPDATE tua_tabela
SET sequencia = my_new_ordem.new_sequencia
FROM (SELECT my_old_ordem.*, NEXTVAL('seq_id') AS new_sequencia
-- Esta subseleção é devido a que, ao informar na consulta principal, o seqüêncial é gerado antes da consulta fazer a ordenação, tornado sua ordem "aleatória"...
FROM (SELECT tua_tabela.id
, tua_tabela.sequencia
FROM tua_tabela
WHERE (tua_tabela.sequencia BETWEEN 119 AND 500)
ORDER BY tua_tabela.id
, tua_tabela.sequencial
) my_old_ordem
) my_new_ordem
WHERE (my_new_ordem.id = tua_tabela.id);

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar