| 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
 
 
 No IBExpert 	  | 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
 | 
 
 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 |  | 
	
		|  | 
	
		|  |