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....
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
Curtir tópico
+ 0
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);
-- 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
Clique aqui para fazer login e interagir na Comunidade :)