Cuando lanzas un script de definición SQL, es decir varias sentencias SQL que modifican la estructura de una base de datos, dichas sentencias deben ir separadas por punto y coma:
Código SQL
[-]
alter table clientes add telefono_movil char(9);
alter table clientes add telefono_fijo char(9);
Algunas veces, necesitas lanzar un script que cree un stored procedure o un trigger:
Código SQL
[-]
CREATE TRIGGER AI_PENALIZACIONES FOR PENALIZACIONES_DET ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
IF ((NEW.CODIGO IS NULL) or (NEW.CODIGO = 0)) THEN
NEW.CODIGO = GEN_ID(GEN_PENALIZACIONES_CODIGO, 1);
END;
Con esto se presenta un problema, la herramientas que uses para ejecutar el script llegará al primer punto y coma e intentará procesar la sentencia:
Código SQL
[-]
CREATE TRIGGER AI_PENALIZACIONES FOR PENALIZACIONES_DET ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
IF ((NEW.CODIGO IS NULL) or (NEW.CODIGO = 0)) THEN
NEW.CODIGO = GEN_ID(GEN_PENALIZACIONES_CODIGO, 1);
Obteniendo un bonito error, ya que falta el END del BEGIN para finalizar la definición del trigger. Con la sentencias SET TERM podemos indicar que el terminador va a ser otro diferente al punto y coma, así podemos definir el trigger o el store precedure del tirón y que lo procese cuando encuentre el nuevo terminador de sentencias:
Código SQL
[-]
SET TERM ^ ;
CREATE TRIGGER AI_PENALIZACIONES FOR PENALIZACIONES_DET ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
IF ((NEW.CODIGO IS NULL) or (NEW.CODIGO = 0)) THEN
NEW.CODIGO = GEN_ID(GEN_PENALIZACIONES_CODIGO, 1);
END
^
SET TERM ; ^
Recuerda volver a dejar el SET TERM a ; te evitará dolores de cabeza.
Saludos.