From: | emilio alvarez <dr7tbien(at)terra(dot)es> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | un trigger sencillo que no hay manera con el |
Date: | 2004-11-03 12:25:24 |
Message-ID: | 4188CE34.8080608@terra.es |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
tengo varias tablas, y cada vez que elimino un elemento de alguna de
estas tablas quiero que en una tabla de referencias a todas las demas se
elmine la referencia al articulo eliminado. La tabla ocurrencias_clave
es una especie de buscador, tiene varios campos, pero los mas
importantees son tabla y id_referencia_tabla . Si por jemplo quiero
borrar la referencia en ocurrencias_clave al articulo cuya id es 14,
ejecutare la sentencia:
DELETE FROM ocurrencias_clave WHERE tabla='articulos' AND
id_referencia_tabla=14;
para ello he creado un trigger para una de las tablas, la tabla articulos:
CREATE TRIGGER trigger_borrado_ocurrencias_clave BEFORE DELETE ON articulos
FOR EACH ROW
EXECUTE PROCEDURE eliminar_ocurrencia();
y una funcion:
CREATE OR REPLACE FUNCTION eliminar_ocurrencia() RETURNS TRIGGER AS '
BEGIN
DELETE FROM ocurrencias_clave WHERE tabla=TG_RELNAME AND id=OLD.id;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
Potr lo que veeo en el manual, TG_RELNAME guarda el nombre de la tabla
del trigger, en este caso 'articulos' y OLD.id guardaria la id del
articulo que se borrarĂ¡, en este caso el 14. Sin embargo no funciona
esto. Me da el siguioente error:
WARNING: Error occurred while executing PL/pgSQL function
eliminar_ocurrencia
WARNING: line 2 at SQL statement
ERROR: Unable to identify an operator '=' for types 'character varying'
and 'name'
You will have to retype this query using an explicit cast
gracias anticipadas
dr7tbien
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2004-11-03 14:13:57 | Re: Postgresql |
Previous Message | Diego A. Gil | 2004-11-03 12:21:30 | Re: un trigger sencillo que no hay manera con el |