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

duda con comparacion

Estas en el tema de duda con comparacion en el foro de PostgreSQL en Foros del Web. Hala, una duda. Tengo un trigger que se ejecuta despues de insertar o actualizar. Al interior del trigger hago una pregunta como esta: Código: IF ...
  #1 (permalink)  
Antiguo 03/03/2009, 14:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
duda con comparacion

Hala, una duda.
Tengo un trigger que se ejecuta despues de insertar o actualizar.
Al interior del trigger hago una pregunta como esta:
Código:
IF TG_OP = 'UPDATE' AND OLD.campo = NEW.campo THEN
Bueno resulta que al hacer el insert falla ya que el registro OLD aun no esta asignado.
La pregunta es si es que puedo elaborar esta pregunta en una linea de otra manera.

Obviamente sin hacer un IF dentro de otro o un elsif y cualquiera de esas otras posibilidades.

Gracias, espero puedan responderme.
  #2 (permalink)  
Antiguo 04/03/2009, 03:44
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: duda con comparacion

Tienes el trigger BEFORE INSERT a que si?
con declarar el trigger AFTER INSERT te vale.
5 minutos leyendo la documentación te pueden evitar horas dandole vueltas cosas como esta


Salu2
  #3 (permalink)  
Antiguo 04/03/2009, 06:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Respuesta: duda con comparacion

claramente escribi "despues de", de seguro mi ingles es malo pero nunca tanto.
Código:
CREATE FUNCTION funciona()
RETURNS trigger AS $triggera$
BEGIN
	IF TG_OP = 'UPDATE' AND NEW.campo=OLD.valorcampo THEN
		...
	END IF;
        .....
	RETURN NULL;
END;
$triggera$ LANGUAGE plpgsql;

CREATE TRIGGER triggera
  AFTER INSERT OR UPDATE
  ON mitabla
  FOR EACH ROW
  EXECUTE PROCEDURE funciona();
como veras esta algo así, y funciona con el update y con el insert reclama
Consulta fallida: ERROR: record "old" is not assigned yet..
entiendo por que reclama, mi pregunta es si existe alguna manera de que no evalue la condicion NEW.campo=OLD.valorcampo si es que falla la primera TG_OP = 'UPDATE' como cuando programo en otro lenguaje, o hay algo mal en lo que hago, obviamente con elsif o if dentro de if funciona, pero no es la gracia???

Última edición por refreegrata; 04/03/2009 a las 07:08
  #4 (permalink)  
Antiguo 04/03/2009, 08:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: duda con comparacion

Sorry, lei rapido!
Sql es un lenguaje declarativo, asi que no te guies por como funcionan los compiladores de otros lenguajes.
Es decir, en sql que no se cumpla la primera condición de un AND no significa que no se intente evaluar la segunda condición.
Anida un par de IF y lo tienes solucionado.

Salu2
  #5 (permalink)  
Antiguo 04/03/2009, 08:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Respuesta: duda con comparacion

Bueno, si esa es la única forma habra que hacerlo así. No es que no se me haya ocurrido, sólo quería saber si se podía escribir de una manera más compacta.

Gracias por responder.
  #6 (permalink)  
Antiguo 05/03/2009, 14:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: duda con comparacion

A mi tambien me ha pasado, pero no hay otra forma.

Salu2
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 19:28.