Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Parametros en Trigger (https://www.clubdelphi.com/foros/showthread.php?t=77001)

Behemot 13-12-2011 07:39:47

Parametros en Trigger
 
Saludos a todos, quisiera saber si se puede pasar de alguna forma un parámetro a un trigger.

Tengo este Trigger que funciona bien

Código SQL [-]
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:

Código SQL [-]
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
Código SQL [-]
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

Código SQL [-]
  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?

Código SQL [-]
  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 de -guillotmarc- Pero lo necesito hacer desde la BD, la variable como ves es una constante, en mi ejemplo me falto multiplicar por 100.

Cita:

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:

Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 03:52:33.

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