PDA

Ver la Versión Completa : Procedure Y Trigger


ronson
24-02-2004, 13:04:31
hola amigos, imaginemos que tenemos este procedure:

CREATE PROCEDURE BORRAR_ALBARAN (
PNUMERO INTEGER)
AS
BEGIN
DELETE FROM ALBARANES
WHERE NUMERO=:pNUMERO;
/* Procedure body */
SUSPEND;
END

este procedure borraria la linea en la tabla maestro donde el numero sea igual al numero, el trigger asociado ANTES de borrar en albaranes para borrar en LINEAALBARANES tengo una duda:


CREATE TRIGGER PROPAGAR_BORRADO_LALBARANES FOR ALBARANES
BEFORE DELETE AS
BEGIN
DELETE FROM LINEAALBARANES WHERE NUMERO=old.NUMERO AND ANNO=old.ANNO;

/*y aqui viene mi duda: por que me da error de compilacion?
me sale esto:
fmCompile.quCompile:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command.*/

END

NACLU2:confused:

delphi.com.ar
24-02-2004, 13:51:47
Me parece que el error es que te falta un "End;" al final del trigger...

Saludos!

Nuria
24-02-2004, 17:06:21
Hola!

Prueba a creartelo así:

SET TERM ;^

CREATE TRIGGER PROPAGAR_BORRADO_LALBARANES FOR ALBARANES
ACTIVE BEFORE DELETE POSITION 0 AS
BEGIN
DELETE FROM LINEAALBARANES WHERE NUMERO=old.NUMERO AND ANNO=old.ANNO;
END^

SET TERM ;^


Espero que te sirva!

jachguate
24-02-2004, 17:37:02
Solo comento que Interbase/Firebird soporta automáticamente actualizaciones y borrados en cascada, asi que si queres que se eliminen automáticamente los detalles de una tabla, al crear el constraint basta con añadir:

on delete cascade;

y listo. La base de datos se encarga y no tenes que programar vos estos triggers.

Hasta luego.

;)

pd. otra cosa... en el procedure Borrar_Albaran... no se si hay algo mas, pero no le veo sentido a la sentencia Suspend;

Nuria
24-02-2004, 18:09:59
Publicado originalmente por jachguate
Solo comento que Interbase/Firebird soporta automáticamente actualizaciones y borrados en cascada... on delete cascade;


:eek: Y yo sin saberlo... :D