PDA

Ver la Versión Completa : Error en trigger


janasoft
17-10-2014, 14:38:15
Hola a todos.
Estoy empezando a hacer cosas con FireBird y no estoy muy familiarizado con la sintaxis y la forma de trabajar.

El caso es que he generado un trigger que se ejecuta cuando creo un registro en una tabla y que, a su vez, crea un registro en otra.

La idea es que cuando el campo 'aplicar_re1 de la primera tabla valga '1' se guarde en el campo 'RE' de la segunda tabla el valor obtenido mediante la sentencias 'select RE from impuestos where impuesto_ID = new.tipo_iva', mientras que si vale '0' lo que se guarde sea el valor '0'. Con las primeras líneas del código pretendo asignar este valor a la variable 'ReqEquiv'


declare variable ReqEquiv integer;
begin
if (new.aplicar_re = 1) then
ReqEquiv = (select RE from impuestos where impuesto_ID = new.tipo_iva);
else
ReqEquiv = 0;

insert into regulariz_almcn (Fecha, Sentido, Causa_ID, Producto_ID, Cantidad, Precio, IVA, RE, Act_Precio, Act_Stock)
values ('now', 0, 1, NEW.producto_id, new.stock_actual, new.precio_compra, (select IVA from impuestos where impuesto_ID = new.tipo_iva), ReqEquiv, 0, 0);


El caso es que cuando intento compilar, me aparece el error. 'Column unknown. REQEQUIV' y ya no se cómo seguir.

¿Puede alguien darme una luz sobre lo que estoy haciendo mal?

Muchas gracias

duilioisola
17-10-2014, 15:47:04
La sentencia para cargar una variable con un select es :

select campo from tabla
where
condición
INTO :VARIABLE

Recuerda que dentro de sentencias SQL, si no le pones : antes del nombre de la variable, FB lo tomará como un campo y te dirá que no existe.
En el resto del Trigger/Procedimiento lo tomará como variables.


create trigger tabla_bi0 for tabla
active before insert position 0
as
declare variable reqequiv integer;
begin
if (new.aplicar_re = 1) then
select re
from impuestos
where
impuesto_id = new.tipo_iva
into :reqequiv;
else
reqequiv = 0;

insert into regulariz_almcn (
fecha, sentido, causa_id, producto_id, cantidad, precio, iva, re, act_precio, act_stock)
values (
'now', 0, 1, new.producto_id, new.stock_actual, new.precio_compra, (select iva from impuestos where impuesto_id = new.tipo_iva), :reqequiv, 0, 0);
end

Casimiro Notevi
17-10-2014, 16:20:11
Muchas gracias

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)


Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Y recuerda poner títulos descriptivos a tus preguntas. Gracias :)

janasoft
17-10-2014, 19:16:00
Muchas gracias duilioisola. Con el código que has puesto me ha funcionado perfectamente