quarta-feira, 27 de agosto de 2008

Inserindo uma coluna indice

Não são raras as vezes que nos vemos frente a frente com uma tabela que não contem qualquer indice ou colunas com valores distintos pela qual pode ser indexada.

Como trabalhar com uma tabela assim? Como fazer selects ou updates sem ter uma chave a qual se referir em nossa clausula WHERE? E pior como inserir uma coluna com valores distintos se não podemos fazer updates?

O script abaixo lhe trará a solução para este problema.

Pena que a solução apresentada não pode ser usada em cursores implicitos mas independente disto é muito bem vinda esta solução.

Como teste criamos uma tabela chamada teste. Inserimos valores nela com uma coluna de valores repetidos. Criamos uma sequencia que nos dará numeros distintos e escrevemos o script que fará a magica de poder dar o update apenas em uma linha sem ter de nos referir a nenhum conteúdo especifico.

A magica toda refere-se a current of . Este é o cara que nos possibilita fazer isso.


create table teste (
i number(3),
c varchar(50)
);

insert into test (0, 'um');
insert into test (0, 'dois');
insert into test (0, 'cinco');
insert into test (0, 'dez');
insert into test (0, 'vinte e cinco');

commit;


create sequence numerar;

declare
cursor cur_test is
select i, c from teste for update;
i number(3);
c varchar(50);
begin
open cur_test;
loop
fetch cur_test into i, c;
exit when cur_test%notfound;
update test_for_cursor set i=numeraar.nextval where current of cur_test;
end loop;
end;



É isso.

Até a próxima.

Reginaldo

Nenhum comentário: