Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Terminadores (Set Term) (https://www.clubdelphi.com/foros/showthread.php?t=68696)

Chogo 30-06-2010 22:46:24

Terminadores (Set Term)
 
Que siera por favor que me explicaran un poco, Sobre el uso de la sentencia
Set Term y como debe usarla.

Que ventajas me da esta sentencia. la verdad no tomo la idea.

afxe 01-07-2010 16:56:55

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.

Chogo 06-07-2010 16:24:38

Gracias

Excelente tu respuesta. ahora si estoy claro.

Gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 06:48:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi