Ir para conteúdo

POWERED BY:

Arquivado

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

Bravanet

Trigger

Recommended Posts

Pessoal, boa tarde!

 

Possuo a seguinte Trigger:

 

create or replace TRIGGER "CURRENTVALUE_INS_UPD" AFTERINSERT OR UPDATE on "CURRENTVALUE"for each rowDECLARENrow NUMBER;Upd NUMBER;Disabled NUMBER;begin	IF(:NEW.HISTORYENABLED=1) THEN		INSERT INTO HISTORY(RECNBR,TIMESTAMP,VALUE,COMMDRVSTATUS,POINTSTATUS,EVENT,UNIT)VALUES(:NEW.RECNBR,:NEW.TIMESTAMP,:NEW.VALUE,:NEW.COMMDRVSTATUS,:NEW.POINTSTATUS,:NEW.EVENT,:NEW.UNIT);	END IF;	IF((:NEW.POINTSTATUS<>0) AND (:NEW.EVENT=0)) THEN		 SELECT COUNT(*) INTO Nrow FROM ALARM WHERE STATUS IS NULL AND RECNBR=:NEW.RECNBR GROUP BY RECNBR;		 		  IF Nrow=0 THEN			INSERT INTO ALARM(RECNBR,TIMESTAMP,VALUE,COMMDRVSTATUS,POINTSTATUS,UNIT)VALUES(:NEW.RECNBR,:NEW.TIMESTAMP,:NEW.VALUE,:NEW.COMMDRVSTATUS,:NEW.POINTSTATUS,:NEW.UNIT);		 	END IF;					 SELECT COUNT(*) INTO Upd FROM ALARM WHERE STATUS IS NOT NULL AND RECNBR=:NEW.RECNBR AND ALARM_ENABLED='Y' GROUP BY RECNBR;   		  IF Upd=1 THEN			UPDATE ALARM SET STATUS='',VALUE=:NEW.VALUE,COMMDRVSTATUS=:NEW.COMMDRVSTATUS,POINTSTATUS=:NEW.POINTSTATUS,UNIT=:NEW.UNIT WHERE :OLD.RECNBR=:NEW.RECNBR AND STATUS IS NULL;		  END IF;		ELSIF((:NEW.POINTSTATUS=0) AND (:NEW.EVENT=0)) THEN	   			 SELECT COUNT(*) INTO Disabled FROM ALARM WHERE ALARM_ENABLED='Y' AND STATUS IS NOT NULL AND RECNBR=:NEW.RECNBR GROUP BY RECNBR;			IF Disabled=1 THEN			UPDATE ALARM SET ALARM_ENABLED='N' WHERE :OLD.RECNBR=:NEW.RECNBR AND STATUS IS NOT NULL;			 END IF;	END IF;end;

Quando ela roda da o seguinte erro:

error ORA-01403: dados não encontrados ORA-06512: em "GOODYEAR.CURRENTVALUE_INS_UPD", line 18 ORA-04088: erro durante a execução do gatilho 'GOODYEAR.CURRENTVALUE_INS_UPD'

 

O que pude constatar é que se ele não acha nada o COUNT não retorna 0 retorna NULL, ai ferra tudo... alguém sabe como eu poderia resolver isso?

 

OBS: Se tiver algum erro fiquem a vontade para criticar, fazer melhorias e tudo mais, estou começando a mexer com Oracle, então não sei quase nada.

 

Obrigado,

 

Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT COUNT(*) INTO Disabled FROM ALARM WHERE ALARM_ENABLED='Y' AND STATUS IS NOT NULL AND RECNBR=:NEW.RECNBR GROUP BY RECNBR

Pq este GROUP BY RECNBR num Select Count(*)

 

Se usa group by quando se quer agrupar (claro)

 

Pela linha não dá para identificar o ponto mas creio ser isto

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT COUNT(*) INTO Disabled FROM ALARM WHERE ALARM_ENABLED='Y' AND STATUS IS NOT NULL AND RECNBR=:NEW.RECNBR GROUP BY RECNBR
Pq este GROUP BY RECNBR num Select Count(*)Se usa group by quando se quer agrupar (claro) Pela linha não dá para identificar o ponto mas creio ser isto
Deu certo Amigo, Realmente eu não sei pq eu coloquei esse group by, mais como eu disse estou começando agora... aos poucos vou melhorando!obrigado pela força!

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.