PDA

Ver la Versión Completa : Parametros en Trigger


Behemot
13-12-2011, 07:39:47
Saludos a todos, quisiera saber si se puede pasar de alguna forma un parámetro a un trigger.

Tengo este Trigger que funciona bien


SET TERM ^ ;
CREATE TRIGGER TRI_ENTIDADES FOR TBL_ENTIDADES_ ACTIVE
BEFORE INSERT POSITION 0
AS
begin
new.clave = gen_id(GEN_ENTIDADES,1);
end^
SET TERM ; ^


y quiero hacer algo como esto:


SET TERM ^ ;
CREATE TRIGGER TRI_ENTIDADES FOR TBL_ENTIDADES_ ACTIVE
BEFORE INSERT POSITION 0
AS
begin
new.clave = gen_id(GEN_ENTIDADES,1) + :Numero_x;
end^
SET TERM ; ^



Esa variable Numero_x se pude usar así? como se declara? como se le asigna el valor? :confused:

Gracias por su ayuda.

defcon1_es
13-12-2011, 13:46:49
Hola.
Que yo sepa, Firebird no permite el paso de parámetros en sus trigger, puesto que responden a un evento y no se ejecutan explícitamente.

Por otra parte, los generadores normalmente se usan para dar valores únicos y correlativos
y la instrucción gen_id(GEN_ENTIDADES,1) devuelve el valor actual del generador y lo incrementa en 1,
y lo que pretendes podría dar conflictos (coincidencia en los valores) si CLAVE esta definido con una Primary Key o está definido como UNIQUE.

EJP:
Valor inicial del generador = 1
Quiero incrementar en 12

new.clave = gen_id(GEN_ENTIDADES,1) + 12;

El generador tiene como valor 2 y NEW.Clave tendría como valor 13...
¿qué pasaría si ahora lo quiero incrementar en 9?

new.clave = gen_id(GEN_ENTIDADES,1) + 9;

Pues que el generador tiene como valor 3 y NEW.Clave tendría como valor 13 también...

¿Para qué necesitas que el campo CLAVE pegue esos saltos en la numeración?

Behemot
13-12-2011, 19:07:24
La verdad la idea la he tomado de este post (http://www.clubdelphi.com/foros/showpost.php?p=421005&postcount=1) de -guillotmarc- Pero lo necesito hacer desde la BD, la variable como ves es una constante, en mi ejemplo me falto multiplicar por 100.

select gen_id(GENERADOR_TABLA, 1) * 100 + UBICACION
from CONFIG

Excisten constantes a nivel de BD?, he visto en algún trigger algo asi @@VARIABLE pero no entiendo como funciona.

Casimiro Notevi
13-12-2011, 19:17:10
Quizás puedas usar una tabla de "configuración" de donde obtendría ese dato.
Algo parecido a esto:

select gen_id(GENERADOR_TABLA, 1) * (select numero from tbconfiguracion) from CONFIG

Behemot
13-12-2011, 20:34:48
Gracias Casimiro, creo que esa es la solución, solo debo controlar la sede en la tabla tbconfiguracion que mensionas. Gracias.