trigger needs to check in multiple tables. - Mailing list pgsql-sql

From Jacobo García
Subject trigger needs to check in multiple tables.
Date
Msg-id 5f867bd20608181017u2ccf8db7o12338bbbe66977fb@mail.gmail.com
Whole thread Raw
Responses Re: trigger needs to check in multiple tables.  (Michael Fuhr <mike@fuhr.org>)
List pgsql-sql
Hello.<br /><br />I'm running a simple query inside a function that is associated with a trigger:<br /><br />    <span
style="font-family:courier new,monospace;">SELECT tipo INTO tipocuenta FROM producto WHERE
codigo_cuenta=NEW.codigo_destino;</span><br /><br />I am getting this error when running the code on pgadmin III<br
/><br/><span style="font-family: courier new,monospace;">ERROR:  NEW used in query that is not in a rule</span><br
style="font-family:courier new,monospace;" /><span style="font-family: courier new,monospace;">QUERY:  SELECT  tipo
FROMproducto WHERE codigo_cuenta=NEW.codigo_destino</span><br /><br />I don't know what is failing. I'm running
postgresql8.1.4 on windows. Maybe I have to enable something? <br /><br />Here is the complete code of the function,
surethere will be things wrong, but the statement failing is just next to BEGIN<br /><br /><span style="font-family:
couriernew,monospace;">CREATE OR REPLACE FUNCTION movimientosenoficina() <br />    RETURNS BOOLEAN AS $$<br /><br />   
DECLARE<br/><br />    esoficinacorrecta     BOOLEAN;<br />    esfechacorrecta       BOOLEAN;<br />     op           
 INTEGER;   <br />    fondo             INTEGER;<br />    imp             INTEGER; <br />    tipocuenta       
 INTEGER;<br/>    <br />    BEGIN<br /><br />    SELECT tipo INTO tipocuenta FROM producto WHERE
codigo_cuenta=NEW.codigo_destino;<br/><br />    IF (tipocuenta=71) THEN<br />        <br />        IF (op=51) THEN <br
/>           esfechacorrecta:=primerosmes();<br />           
esoficinacorrecta:=oficinacorrecta(NEW.codigo,NEW.codigo_oficina);<br/><br />        ELSIF (NOT op=11 OR NOT op=12)<br
/>   <br />            RAISE EXCEPTION 'Operación no permitida sobre cuentas a plazo'; <br />        <br />        END
IF;<br/><br />    ELSIF (tipocuenta=60)<br />    <br />            <br />        --Permiten todo tipo de operaciones
<br/><br /><br /><br />    ELSIF (tipocuenta=10)<br />    <br />        <br /><br />        IF (op=54) THEN <br /><br
/>           SELECT saldo INTO fondo FROM producto WHERE codigo_cuenta = NEW.destino;<br />            SELECT cantidad
INTimp FROM movimiento WHERE codigo = NEW.codigo;<br /><br />            IF (fondo!=imp) THEN <br />        <br />   
           RAISE EXCEPTION 'Se ha de transferir todo el saldo de la cuenta'<br />        <br />            ELSE<br
/>               oficinacorrecta(NEW.codigo,NEW.codigo_oficina);<br />            <br />                -- Ponemos la
cuentainactiva si retiramos los fondos <br />                UPDATE cuenta_a_plazo SET activo=TRUE WHERE codigo_cuenta
=NEW.destino;<br />            ENDIF;<br />        ENDIF;<br /><br />        <br /><br /><br />    ELSE<br />       
RAISEEXCEPTION 'Tipo de cuenta no existente'; <br /><br /><br />    END IF;<br /><br /><br />    <br /><br />    <br
/><br/><br />    RETURN NEW;<br /><br /><br />    END;<br />$$ LANGUAGE plpgsql;<br /><br />/* Este trigger se activa
unavez hemos comenzado la transaccion y hemos insertado en movimiento_oficina <br />  nos sirve para evitar operaciones
nodefinidas o erroneas sobre los distintos tipos de cuentas*/<br /><br />CREATE TRIGGER validamovimientosenoficina
BEFOREINSERT OR UPDATE ON CLIENTE<br />FOR EACH ROW EXECUTE PROCEDURE movimientosenoficina(); </span><br clear="all"
/><br/>-- <br />Jacobo García López de Araujo  

pgsql-sql by date:

Previous
From: Andrew Sullivan
Date:
Subject: Re: Multiple DB join
Next
From: Michael Fuhr
Date:
Subject: Re: trigger needs to check in multiple tables.