Pergunta

Eu tenho esta tabela em uma DB Oracle, que tem uma chave primária definida em 3 das colunas de dados. Eu quero largar a restrição de chave primária para permitir linhas com dados duplicadas para essas colunas, e criar uma nova coluna, 'id', para conter um ID inteiro auto-incremento para essas linhas. Eu sei como criar uma seqüência e gatilho para adicionar um ID auto-incremento de novas linhas adicionadas à tabela, mas é possível escrever uma instrução PL / SQL para adicionar IDs únicas para todas as linhas que já estão em cima da mesa?

Foi útil?

Solução

Depois de ter criado a seqüência:

update mytable
set id = mysequence.nextval;

Outras dicas

Se você estiver usando apenas um inteiro para uma seqüência que você pode atualizar o id com o rownum. por exemplo.

update
table
set id = rownum

Você precisa então redefinir a seqüência para o próximo ID válido.

É isso que você precisa?

UPDATE your_table
   SET id = your_seq.nextval;

Isso pressupõe que você não se importa que ordem as suas chaves primárias estão em.

Em primeiro lugar você deve verificar o seu PCTFREE ... há espaço suficiente para cada linha para obter mais tempo?

Se você escolheu uma pequena PCTFREE ou seus dados tem muitas atualizações crescente lenght, que você pode começar encadeamento cada linha para fazer isso como uma atualização.

Você quase certamente melhor de fazer isso como um CTAS.

Criar tabela t2 como selecionar seq.nextval, t1. * From t1.

queda t1

renomeação t2 para t1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top