Ver Mensaje Individual
  #4  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 30
jachguate Va por buen camino
esto, segun tengo entendido, ya ha sido superado en la versión 1.5 de firebird. Básicamente, es debido a que el programa cliente no era capaz de recnoocer el final del trgger/stored procedure, debido a que el caracter de fin de sentencia (;, que es el que normalmente se usa para delimitar las sentencias en un script, también se utiliza para delimitar las sentencias dentro del trigger.

Si no haces la llamada a set term... ocurrirá que, en un script como este:

Código:
  Create trigger mitrigger
    Active before insert on tabla
  AS
  Begin
    Update OtraTabla
         Set campo = campo + New.campo
      where llave = New.llave;
    Update OtraTabla2
         Set campo = campo + New.campo
      where llave = New.llave;
  End;
El sistema creerá que la sentencia termina despues del primer punto y coma (justo despues del primer update) y asi la lanzará al pharser de SQL; evidentemente incompleta, con lo que daría un error que provocaría la terminación anormal de la ejecución del script.

Al cambiar el caracter de terminación de las sentencias por !!, por ^ o por cualquier otro delimitador que no sea el punto y coma, se consigue determinar donde termina efectivamente la sentencia... evitando estos problemas.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita