Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Error en el Trigger!!!!

Estas en el tema de Error en el Trigger!!!! en el foro de PostgreSQL en Foros del Web. Buenos dias. A todos los foreros. Miren les comento lo siguiente: Tengo dos tablas una se llama cuentas y la otra se llama historial (campos: ...
  #1 (permalink)  
Antiguo 21/04/2010, 10:41
Avatar de Huacho12  
Fecha de Ingreso: septiembre-2008
Ubicación: Isla Mujeres Q. Roo
Mensajes: 175
Antigüedad: 15 años, 7 meses
Puntos: 10
Error en el Trigger!!!!

Buenos dias.

A todos los foreros.

Miren les comento lo siguiente:

Tengo dos tablas una se llama cuentas y la otra se llama historial (campos: idusurio,idcliente,accion).

Lo que quiero hacer es que me diante un trigger al momento que se inserte o elimine, automaticamente se inserte en la tabla de historial.

Ya he hecho el script del la funcion y del trigger pero al momento de insertar en la tabla cuentas me manda un error en la funcion, y por lo que tampoco deja insertar en la tabla cuentas; aqui les dejo el error que me manda:

ERROR: no existe la columna <<DELETE>>
LINEA 1: SELECT $1 = "DELETE"
^
CONSULTA: SELECT $1 = "DELETE"
CONTEXTO: PL/pgSQL function "respaldo_cuentas" line 3 at IF



Y este es el codigo de la funcion y del trigger:

CREATE FUNCTION respaldo_cuentas()
RETURNS TRIGGER AS
' DECLARE mi_evento varchar;
BEGIN
IF TG_OP = "DELETE" THEN
mi_evento:="elimino";
ELSEIF TG_OP = "INSERT" THEN
mi_evento:="inserto";
END IF;
INSERT INTO historial VALUES (now(), old.idusuario,old.idcliente, mi_evento);
RETURNS null;
END;' LANGUAGE plpgsql;

CREATE TRIGGER backup_cuentas
AFTER delete or insert
on cuentas
for each row execute procedure respaldo_cuentas();


De antemano les agradesco la ayuda.

Saludos!!!!!!
  #2 (permalink)  
Antiguo 21/04/2010, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Error en el Trigger!!!!

Crea la función así:
Código SQL:
Ver original
  1. CREATE FUNCTION respaldo_cuentas()
  2. RETURNS TRIGGER AS
  3. $body$
  4.  DECLARE mi_evento VARCHAR;
  5. BEGIN
  6. IF TG_OP = 'DELETE' THEN
  7. mi_evento:='elimino';
  8. ELSEIF TG_OP = 'INSERT' THEN
  9. mi_evento:='inserto';
  10. END IF;
  11. INSERT INTO historial VALUES (now(), OLD.idusuario,OLD.idcliente, mi_evento);
  12. RETURNS NULL;
  13. END;
  14. $body$ LANGUAGE plpgsql;

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 21/04/2010, 13:35
Avatar de Huacho12  
Fecha de Ingreso: septiembre-2008
Ubicación: Isla Mujeres Q. Roo
Mensajes: 175
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Error en el Trigger!!!!

Hola huesos52!!


Gracias por tu ayuda.

Enseguida lo pruebo y te aviso que paso.


Y de nuevo gracias.
  #4 (permalink)  
Antiguo 21/04/2010, 14:07
Avatar de Huacho12  
Fecha de Ingreso: septiembre-2008
Ubicación: Isla Mujeres Q. Roo
Mensajes: 175
Antigüedad: 15 años, 7 meses
Puntos: 10
Respuesta: Error en el Trigger!!!!

MMMMM!!!!!!!

No quedo, sigue marcando error. Aqui te dejo el error que manda:

ERROR: el rejistro <<old>> no ha sido asignado aun
DETALLE: La estructura de la fila de un registro aun no asignado no esta determinado.

CONTEXTO: funcion PL/pgSQL <<respaldo_cuentas>> en la linea 9 en sentencia SQL.


Este es el error que marca!!!!!!!!!!

Ya lo probe cambiandole el old por el new pero marca lo mismo bueno casi lo mismo:

ERROR: el registro <<new>> no tiene un campo <<idusuario>>
CONTEXTO: funcion PL/pgSQL <<respaldo_cuentas>> en la linea 9 en sentencia SQL.



De antemano gracias!!!

Saludos.
  #5 (permalink)  
Antiguo 21/04/2010, 16:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Error en el Trigger!!!!

El trigger se dispara despues de estas acciones. Al dispararse después, el valor OLD se pierde.

Debes pensar bien el momento de disparar el trigger (After o Before) para efectuar la operación que requieres.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:14.