Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Error en trigger (https://www.clubdelphi.com/foros/showthread.php?t=86882)

janasoft 17-10-2014 14:38:15

Error en trigger
 
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 :
Código SQL [-]
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.

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

Cita:

Empezado por janasoft (Mensaje 483238)
Muchas gracias

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)


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



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


La franja horaria es GMT +2. Ahora son las 16:49:22.

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