Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Dez 05, 2006 10:52 pm Assunto: Incrementar e Decrementar um Trigger sem Generator=Resolvid |
|
|
Pessoal estou querendo fazer uma trigger pegar o ultimo valor de um autoincremento e gerar um novo apartir dai;
Fiz esta trigger sem usar o generator
Código: | CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
new.sequencia2 = (select coalesce(max(sequencia2),0)+1 from CORRENTE);
end | No IBExpert
Mais esta gerando um erro de script
Citação: | Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.
|
Alguem pode me informar como fazer corretamente essa trigger
Lembrando uso Firebird 2.0
Editado pela última vez por adriano_servitec em Qua Dez 06, 2006 4:24 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
gustavocco Administrador

Registrado: Sexta-Feira, 6 de Fevereiro de 2004 Mensagens: 4253 Localização: Chapecó - SC
|
Enviada: Qua Dez 06, 2006 10:11 am Assunto: |
|
|
Olá, estou com o FB 1.5 aqui, mas deve ser a mesma coisa.
Código: |
CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
select coalesce(max(sequencia2),0)+1 from CORRENTE into new.sequencia2;
end
|
Flw. |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Dez 06, 2006 10:22 am Assunto: |
|
|
gustavocco escreveu: | Olá, estou com o FB 1.5 aqui, mas deve ser a mesma coisa.
Código: |
CREATE TRIGGER CORRENTE_BI0 FOR CORRENTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.sequencia2 is null) then
select coalesce(max(sequencia2),0)+1 from CORRENTE into new.sequencia2;
end
|
Flw. |
Ai guri, quem conheçe de trigger conheçe...era isso mesmo Gustavo, tava invertendo tudo ... hehehehe
Perfeito ficou o codigo agora amigo
Obrigado |
|
Voltar ao Topo |
|
 |
gustavocco Administrador

Registrado: Sexta-Feira, 6 de Fevereiro de 2004 Mensagens: 4253 Localização: Chapecó - SC
|
Enviada: Qua Dez 06, 2006 10:24 am Assunto: |
|
|
hehehe.. faltava pouco... passou raspando hehehe...
abraço Adriano.
Flw ai. _________________ Top System - www.topsystem.com.br |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Dez 06, 2006 2:58 pm Assunto: |
|
|
Agora estou com problemas para fazer um After Delete
Código: | ALTER TRIGGER CORRENTE_AD0
ACTIVE AFTER DELETE POSITION 0
AS
begin
/* Trigger text */
UPDATE CORRENTE SET SEQUENCIA2 = SEQUENCIA2 - 1
WHERE SEQUENCIA2 > OLD.SEQUENCIA2;
end |
Ou seja quero que faça um update nesta sequencia na hora em que eu deletar algo
se tenho a sequencia
1
2
3
4
e deletar a sequencia 3
em vez de ficar assim
1
2
4
ficar assim
1
2
3
ou seja a sequencia 4 fica sendo a tres
masi se eu uso essa trriger desta forma acima se eu deleat a sequencia 3 fica assim meu banco
1
2
ou seja
a sequencia 4 tambem esta deletando.
O que eu quero mesmo eh na hora de deletar alguma sequencia a trigger fazer um update corrigindo as sequencias e colocando elas novamente na ordem.
Grato a ajuda de todos
Adriano |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Dez 06, 2006 4:20 pm Assunto: |
|
|
Descobri como fazer para organizar a sequencia pelo trigger, basta criar um indice no campo no caso aqui sequencia2 que funciona perfeitamente. Eh logico usando os codigos acima postados.
Tanto no before insert como no after delete
Bom tai agora foi resolvido.
Se um dia alguem precisar de um trriger com autoincremento sem generators e com os codigos organizados esses codigos acima fazem o que exatamente isso.
Abraços a todos
Adriano
Editado pela última vez por adriano_servitec em Qua Dez 06, 2006 5:23 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
delphagundes Aprendiz

Registrado: Sexta-Feira, 10 de Novembro de 2006 Mensagens: 161
|
Enviada: Qua Dez 06, 2006 5:10 pm Assunto: |
|
|
Bendito seja quem inventou o HELP e o GOOGLE!
hehehe...
Abraços! _________________ "Somos jovens e espertos!" |
|
Voltar ao Topo |
|
 |
|