Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Firebird : triggers (https://www.clubdelphi.com/foros/showthread.php?t=58882)

jmlifi 05-08-2008 12:30:19

Firebird : triggers
 
Hola a todos!!!

Tengo el siguiente trigger:
Código Delphi [-]
CREATE TRIGGER ACTSUB FOR LNSUBCONT ACTIVE
AFTER INSERT POSITION 0
as
declare Variable EsCorte Char;
declare variable EsTrabajo Integer;
begin
   select Corte,Ordentrabajo from SubContratos where codigo = New.Codigo
   into :EsCorte,:EsTrabajo;
   if (((EsCorte='S') or (EsCorte='C')) and (EsTrabajo is null))  then
      update PzasPdtes set PdtesP = PdtesP - new.Cant,
      SubCont= new.Codigo  
      where  (PzasPdtes.O_Ped  = new.O_Ped) and
             (PzasPdtes.Pedido = new.Pedido);
   else
      update Ubicacionpzas set TratmtoAct= new.Tratmto, subcon=new.codigo
      where  (Ubicacionpzas.O_Ped  = new.O_Ped) and
             (Ubicacionpzas.Pedido = new.Pedido);
end

Quiero introducir un mensaje para saber que parte del código me ejecuta. En oracle se que se utiliza DBMNS...

¿hay posibilidad de hacerlo?

saludos

mlara 12-08-2008 19:26:06

Desde un SP yo uso una DLL que proporciona una función (UDF) que permite almacenar en un archivo de texto un mensaje. Como la DLL se encuentra en el servidor, el archivo será creado ahí. Es una herramienta interesante que uso para depurar el código y también para almacenar logs según se van ejecutando órdenes dentro de un SP.

La forma de usarla es simple:

Código SQL [-]
SELECT DEBUGGER('Este es un mensaje generado el  ' || CAST(CAST('NOW' AS TIMESTAMP) AS VARCHAR(24)), 'D:\Logs\Log0001.log', '1')
FROM RDB$DATABASE INTO :DebuggerResult;

Esta sentencia creará el archivo Log0001.log en la ubicación D:\Logs en el servidor. Dentro de este archivo el mensaje: "Este en un mensaje generado el 2008-08-12 13:33:18.0000"

DEBUGGER es una UDF previamente declarada en la base de datos así:

Código SQL [-]
DECLARE EXTERNAL FUNCTION DEBUGGER
  CSTRING(255), CSTRING(255), CSTRING(2)
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'debugger' MODULE_NAME 'ibdebug';

y la DLL ibdebug puedes construirla tu mismo usando Delphi, lenguaje C, u otro lenguaje.

Como se trata de una sentencia SQL normal que usa una función definida por el usuario puedes usarla dentro de tu TRIGGER.


La franja horaria es GMT +2. Ahora son las 07:28:48.

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