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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.