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.
|
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