Fórum O que ta errado - Stored #44542
29/05/2004
0
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
Curtir tópico
+ 0Posts
29/05/2004
Afarias
o que exatamente vc deseja?!
T+
Gostei + 0
29/05/2004
Renato_sp
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
Gostei + 0
29/05/2004
Afarias
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+
Gostei + 0
29/05/2004
Renato_sp
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
Gostei + 0
29/05/2004
Afarias
|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+
Gostei + 0
29/05/2004
Renato_sp
Muito obrigado mesmo.. !!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)