Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ademilson Moreira

Numerar campos no firebird

Recommended Posts

Tenho uma tabela com 350.000 registros.

Precisei criar um campo para numerar, tipo código.

Como faço para jogar os numeros nos registros de 1 até .....

tem um comando sql que faz isto pra mim ou tenho que fazer via programação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite ademilson Moreira.

 

Voce pode fazer das duas maneiras.

 

Se for fazer via código, será com um código simples do Delphi o qual passo abaixo, e que deverá ser escrito no Evento OnClick de um botão qualquer:

 

procedure TForm1.btnInserirNumero(Sender: TObject);
  var I: Integer; 
  begin
	  I := 1;
	  Query1.First;
	  while not Query1.Eof do 
	  begin
		   Query1.Edit;
		   Query1.FieldByName('Codigo').asInteger := I;
		   Query1.Post;
		   Query1.Next;
		   Inc(I);  // Incrementa a variável I	
	  end;
	  Query1.CommitUpdates;
  end;

A Query é justamente o componente que lê a sua tabela e traz o DataSet para a sua máquina.

 

Sinceramente, já que sua tabela tem 350.000 registros, então devo alertá-lo que o código acima demorará uma penca de minutos, mas de 30 minutos talvez, ou mais.

 

Se for fazer via SQL, acredito que seja mais rápido, neste caso voce terá que criar uma Stored Procedure dentro do Console do Firebird, podendo ser até dentro do IBExpert, assim.

 

SET TERM ^;

CREATE PROCEDURE INCREMENTA_CODIGO
as
declare variable increment integer;
begin
  increment = 1;
  For Select * From NomeTabela do
  begin
	  update NomeTabela set codigo = increment;
	  increment = increment + 1;
  end
  suspend;
end^

SET TERM; ^

Se voce estiver utilizando o IBExpert, basta escrever este código dentro dos SQL Editor ou do New SQL Editor, que são dois ícones parecidos com uma folha escrita no menu igual ao do Word, já dentro do IBConsole, utilizará o SQL Editor.

 

Como vou executar esta procedure ? Simples, após esta Stored Procedure ser salva, voltamos ao SQL Editor, e digito o seguinte código, e logo após execute com o ícone que tem um raio amarelo.

 

Exec Incrementa_Codigo;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá sou eu de novo.

 

O código SQL da Stored Procedure que postei aqui contém erros.

 

Por esta razão eu gostaria de pedir desculpas e corrigi o erro.

 

Bom, o código da Stored Procedure do jeito que está não compila, pois existe um erro de escrita logo após o NomeTabela, pois qualquer campo de NomeTabela precisa ser passado como parâmetro para dentro de um variável.

 

Existe também um erro de lógica, onde a instrução Update * From NomeTabela set Codigo = Increment, ele vai atualizar toda a tabela para um único valor somente.

 

Assim sendo eis o código certo.

 

Suponhamos que a sua tabela de 350.000 registros tem um campo Nome, então utilizaremos este campo como referência para que a instrução identifique cada linha de registro e atualize somente este linha com um valor incrementado, assim:

 

SET TERM ^;

CREATE PROCEDURE INCREMENTA_CODIGO 
as
declare variable nom varchar(50);
declare variable increment integer;
begin
  increment = 1;
  For Select nome From NomeTabela into :nom
  do begin
	 update NomeTabela set Codigo = :increment where nome = :nom;
	 increment = :increment + 1;
  end
  suspend;
end^

SET TERM; ^

Existe também o erro de como se invoca a procedure, o código certo é este:

 

Execute Procedure Incrementa_Codigo;

Agora podes contar que funciona.

 

Me desculpe o erro.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.