Ir al contenido


Foto

[RESUELTO] Ayuda con un Trigger en firebird


  • Por favor identifícate para responder
4 respuestas en este tema

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 18 agosto 2010 - 12:50

Saludos amigos, tengo un problema, según yo, este script esta bien pero al correrlo en FireBird me dice que hay error en el SELECT, alguien que me ayude a enter el porque, si mal no recuerdo eso es válido o no?

eh aquí el script



sql
  1. CREATE TRIGGER OBI_PEDIME FOR SAAIO_PEDIME
  2. ACTIVE AFTER INSERT OR UPDATE OR DELETE
  3. POSITION 0
  4. AS
  5. DECLARE iID INTEGER;
  6. DECLARE sTIPO VARCHAR(1);
  7. DECLARE sREFE VARCHAR(15);
  8. BEGIN
  9.   IF (INSERTING) THEN BEGIN
  10.     sTIPO = 'I';
  11.     sREFE = NEW.NUM_REFE;
  12.   END ELSE IF (UPDATING) THEN BEGIN
  13.     sTIPO = 'U';
  14.     sREFE = OLD.NUM_REFE;                                                                                                 
  15.   END ELSE IF (DELETING) THEN BEGIN                                     
  16.   sTIPO = 'D';
  17.   sREFE = OLD.NUM_REFE;
  18.   END
  19.  
  20.   IF (SELECT COUNT(SYS_ID) FROM SYS_LOG WHERE (SYS_TABLA='SAAIO_PEDIME') AND (SYS_REFE=:sREFE))=0 THEN
  21.     INSERT INTO SYS_LOG (SYS_TIPO,SYS_FECHA,SYS_OPER,SYS_TABLA,SYS_REFE,SYS_CAMPO,SYS_VALOR,SYS_NUMCVE) VALUES (:sTIPO,'NOW','O','SAAIO_PEDIME',:sREFE,'NUM_REFE',:sREFE,1);
  22. END;



Saludos...
:smiley:
  • 0

#2 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 18 agosto 2010 - 01:04

intenta asi..



sql
  1. CREATE TRIGGER OBI_PEDIME FOR SAAIO_PEDIME
  2. ACTIVE AFTER INSERT OR UPDATE OR DELETE
  3. POSITION 0
  4. AS
  5. DECLARE iID INTEGER;
  6. DECLARE nCuantos INTEGER;
  7. DECLARE sTIPO VARCHAR(1);
  8. DECLARE sREFE VARCHAR(15);
  9. BEGIN
  10. IF (INSERTING) THEN BEGIN
  11. sTIPO = 'I';
  12. sREFE = NEW.NUM_REFE;
  13. END ELSE IF (UPDATING) THEN BEGIN
  14. sTIPO = 'U';
  15. sREFE = OLD.NUM_REFE;
  16. END ELSE IF (DELETING) THEN BEGIN
  17. sTIPO = 'D';
  18. sREFE = OLD.NUM_REFE;
  19. END
  20.  
  21.  
  22. SELECT COUNT(SYS_ID) FROM SYS_LOG WHERE (SYS_TABLA='SAAIO_PEDIME') AND (SYS_REFE=:sREFE)
  23.   INTO :nCuantos;
  24.  
  25.  
  26. IF (nCuantos=0) THEN
  27.   INSERT INTO SYS_LOG  (SYS_TIPO,SYS_FECHA,SYS_OPER,SYS_TABLA,SYS_REFE,SYS_CAMPO,SYS_VALOR,SYS_NUMCVE) VALUES (:sTIPO,CURRENT_DATE,'O','SAAIO_PEDIME',:sREFE,'NUM_REFE',:sREFE,1);
  28. END;


  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 18 agosto 2010 - 03:03

Efectivamente, con eso quedó listo, gracias amigo pcicom, lo que no entiendo es, que no se supone que en si es lo mismo?, en fin asi como lo planteas si funciona.

GRacias.  (y) (y) (y) (y)
  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 18 agosto 2010 - 05:35

Saludos.

Un poco tarde pero....


sql
  1. CREATE TRIGGER OBI_PEDIME FOR SAAIO_PEDIME
  2. ACTIVE AFTER INSERT OR UPDATE OR DELETE
  3. POSITION 0
  4. AS
  5. DECLARE iID INTEGER;
  6. DECLARE sTIPO VARCHAR(1);
  7. DECLARE sREFE VARCHAR(15);
  8. BEGIN
  9.   IF (INSERTING) THEN BEGIN
  10.     sTIPO = 'I';
  11.     sREFE = NEW.NUM_REFE;
  12.   END ELSE IF (UPDATING) THEN BEGIN
  13.     sTIPO = 'U';
  14.     sREFE = OLD.NUM_REFE;                                                                                                 
  15.   END ELSE IF (DELETING) THEN BEGIN                                     
  16.       sTIPO = 'D';
  17.       sREFE = OLD.NUM_REFE;
  18.   END
  19.  
  20.   IF (NOT EXISTS(SELECT SYS_ID FROM SYS_LOG WHERE (SYS_TABLA='SAAIO_PEDIME') AND (SYS_REFE=:sREFE))) THEN
  21.     INSERT INTO SYS_LOG (SYS_TIPO,SYS_FECHA,SYS_OPER,SYS_TABLA,SYS_REFE,SYS_CAMPO,SYS_VALOR,SYS_NUMCVE) VALUES (:sTIPO,'NOW','O','SAAIO_PEDIME',:sREFE,'NUM_REFE',:sREFE,1);
  22. END;


  • 0

#5 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 18 agosto 2010 - 05:50

Efectivamente, con eso quedó listo, gracias amigo pcicom, lo que no entiendo es, que no se supone que en si es lo mismo?, en fin asi como lo planteas si funciona.

GRacias.  (y) (y) (y) (y)


Firebird, al menos en sus primeras versiones (no sé si ha cambiado en FB 2.1 - 2.5), no permite utilizar subconsultas en la condición de una construcción IF. Por eso debes poner el resultado de la subconsulta en una variable, y evaluar la condición usando esa variable.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.