PDA

Ver la Versión Completa : Firebird : triggers


jmlifi
05-08-2008, 12:30:19
Hola a todos!!!

Tengo el siguiente trigger:
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:


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í:

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.