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