Fórum O que ta errado - Stored #44542

29/05/2004

0

Pessoal o que tem de errado nesta procedure? eu quero que ela atualize o campo codigo fazendo um update deixando, 1,2,3,4,5,6,7, no momento o campo esta assim 1,5,9,15,23,26. fiz assim


CREATE PROCEDURE ATUALIZAR_ORD
RETURNS (
COD INTEGER)
AS
DECLARE VARIABLE NUMERO INTEGER;
begin
numero = 1;
for select CodCliente from Bancos
into :cod do
begin
cod = numero;
numero = numero + 1;
end
end

Sou novato e to tendo dificuldade de fazer, ela ta funcionando mas nao atualiza, uso ela no ibexpert para teste como

execute procedure ATUALIZAR_ORD

Valeu - Renato


Renato_sp

Renato_sp

Responder

Posts

29/05/2004

Afarias

não entendi o q vc deseja... falou em atualizar um campo mas o q o procedimento faz é um SELECT...

o que exatamente vc deseja?!


T+


Responder

Gostei + 0

29/05/2004

Renato_sp

Tipo eu tenho um campo Codigo que ele foi deletado alguns registros.. e ele ficou assim

Codigo - Nome
1 Joao
6 Carlos
9 Sergio
13 Jose

O campo codigo nao ta seguindo uma ordem, eu queria fazer uma procedure que pegasse o primeiro e colocasse 1, pegasse o segundo e colocasse 2 para ficar assim

Codigo - Nome
1 Joao
2 Carlos
3 Sergio
4 Jose

Ou seja ele pegar um por um e ir colocando em ordem.. atualizando..

Nao sei se expliquei direito.. !! qualquer coisa tento novamente...
Valeu pela ajuda


Responder

Gostei + 0

29/05/2004

Afarias

Ok, entendi!

Devo adverti-lo que isto não é um procedimento normal (correto) ou aconselhável (principalmente em se tratando de um SGBD-R)

o q vc quer pode ser conseguido com o procedimento::

create procedure reset_codigos as
begin
  
  /* primeiro, "zere" um generator! */
  select gen_id(nome_generator, -1 * gen_id(nome_generator, 0)) 
  from   rdb$database;

  /* agora atualize a tabela */
  update nome_tabela set codigo = gen_id(nome_generator, 1);

end^



ou (se tiver problemas de erro de chave primária) ::


create procedure reset_codigos as
  declare variable codigo integer;
begin
  
  /* primeiro, "zere" um generator! */
  select gen_id(nome_generator, -1 * gen_id(nome_generator, 0)) 
  from   rdb$database;

  /* agora atualize a tabela */
  for select codigo from nome_tabela
       order by codigo
       into :codigo 
  do begin
     update nome_tabela set codigo = gen_id(nome_generator, 1)
     where codigo = :codigo;
  end

end^




T+


Responder

Gostei + 0

29/05/2004

Renato_sp

Afaria muito obrigado por tudo que tem me explicado.. eu quero fazer essa procedure de atualizar o codigo so para aprender... to fazendo varias stored para ficar treinando.. eu sei que atualizar o codigo nao é aconselhavel por causa de chave primary etc... mas é so para testar para aprender os comandos....

Poderia me explicar isso ? rdb$database; o que seria? no seu codigo vc citou isso para mim !!!! e eu ainda nao sei para que fazer isso?


Renato / SP


Responder

Gostei + 0

29/05/2004

Afarias

|Poderia me explicar isso ? rdb$database; o que seria? no seu codigo vc
|citou isso para mim !!!! e eu ainda nao sei para que fazer isso?

RDB$DATABASE é uma tabela de sistema do IB

-- esta tabela possui alguns dados sobre o banco de dados em questão -- mas seu maior uso é pelo fato de sempre conter apenas 1 registro, sendo assim é usada em selects para obter o valor de uma função, ex::

select gen_id(generator, 1) from rdb$database;
select current_timestamp as ´Data e Hora Atual´ from rdb$database;

Note q não são campos da tabela q estào sendo selecionados, apenas um valor qualquer, e a tebela é usanda por ter apenas 1 registro sendo assim o valor será retornado apenas 1 única vez.

Isso é comum em bancos de dados, no Oracle por exemplo é muito utilizado uma tabela chamada DUAL (que existe justamente para este fim)

T+


Responder

Gostei + 0

29/05/2004

Renato_sp

Afaria.. muito obrigado pela explicacao.. !!! valeu pela ajuda.. !!!
Muito obrigado mesmo.. !!!


Responder

Gostei + 0

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

Aceitar