Bravanet 0 Denunciar post Postado Junho 27, 2007 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
Motta 645 Denunciar post Postado Junho 27, 2007 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
Bravanet 0 Denunciar post Postado Junho 28, 2007 SELECT COUNT(*) INTO Disabled FROM ALARM WHERE ALARM_ENABLED='Y' AND STATUS IS NOT NULL AND RECNBR=:NEW.RECNBR GROUP BY RECNBRPq 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 istoDeu 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
Motta 645 Denunciar post Postado Junho 28, 2007 Só erra quem tenta .... Compartilhar este post Link para o post Compartilhar em outros sites