PostgreSQL - Ayuda con un DISPARADOR

 
Vista:

Ayuda con un DISPARADOR

Publicado por Rubix (3 intervenciones) el 15/01/2007 16:54:08
Hola! Estoy haciendo un trigger un poco chorra para un trabajo de clase y no me funciona bien y queria pediros ayuda a ver si encontramos el fallo.

Tengo una tabla llamada CD que contiene :

IMSN (identificador del CD, integer)
Duracion (en segundos, integer)
titulo (varchar)
caratula (donde ira almacenada la caratula, Integer. Acepta NULOS)

La cuestion es que quiero que si no se inserta una caratula me ponga por defecto la caratula el valor 1.

Aqui os paso la declaracion de la tabla CD y el trigger que he creado:

CREATE TABLE CD(
IMSN VARCHAR(15) NOT NULL,
titulo VARCHAR(20) NOT NULL,
duracion INTEGER NOT NULL,
caratula INTEGER,
CONSTRAINT cp_CD PRIMARY KEY(IMSN)
);

CREATE OR REPLACE FUNCTION caratuladefecto() RETURNS TRIGGER AS '
DECLARE
ruta INTEGER;

BEGIN
SELECT caratula INTO ruta
FROM cd
WHERE IMSN = NEW.IMSN;

IF (ruta=NULL) THEN
ruta=1;
END IF;

RETURN NEW;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER tgrCaratulaDefecto
BEFORE INSERT ON cd FOR EACH ROW
EXECUTE PROCEDURE caratuladefecto();

¿Alguna sugerencia? Muchas gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con un DISPARADOR

Publicado por Rubix (3 intervenciones) el 15/01/2007 18:34:22
YUHUUUU!!! ENCONTRE EL ERROR Y SU SOLUCION... Ahi va!

CREATE OR REPLACE FUNCTION caratuladefecto() RETURNS TRIGGER AS '
DECLARE
ruta INTEGER;

BEGIN
SELECT caratula into ruta
FROM CD
WHERE IMSN = NEW.IMSN;

IF (ruta IS NULL) THEN
UPDATE CD
SET caratula = 1
WHERE caratula IS NULL;
END IF;


RETURN NEW;
END;

' LANGUAGE 'plpgsql';

CREATE TRIGGER tgrCaratulaDefecto
AFTER INSERT ON CD FOR EACH ROW
EXECUTE PROCEDURE caratuladefecto();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un DISPARADOR

Publicado por Tannke (3 intervenciones) el 16/01/2007 19:09:35
es correcta si realizas un update.. Suerte Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un DISPARADOR

Publicado por Tannke (3 intervenciones) el 16/01/2007 19:07:42
Te recomiendo que hicieras el insert despues de evaluar que la caratula no existe. Si ese trigger se ejecuta antes de una funcion que inserte a la tabla CD tendrias que revisar lo que realiza esa funcion y pasarle los parametros de condicion que tienes en el trigger.

Evidentemente no puedes saber si la funcion es correcta ya que no esas insertando data o no esta apoyada de una funcion de insert

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un DISPARADOR

Publicado por Rubix (3 intervenciones) el 16/01/2007 22:34:11
Gracias por tu ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar