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

triggers funciones ( como crear una y usarla )

Estas en el tema de triggers funciones ( como crear una y usarla ) en el foro de Bases de Datos General en Foros del Web. Esto es lo que quiero hacer: Que con POR CADA INSERT en "detallefactura" haya un trigger que me incremente la cantidad de esta en la ...
  #1 (permalink)  
Antiguo 30/08/2009, 13:57
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Información triggers funciones ( como crear una y usarla )

Esto es lo que quiero hacer:
Que con POR CADA INSERT en "detallefactura" haya un trigger que me incremente la cantidad de esta en la tabla insumos.
sería un UPDATE insumos..... stock= stock+cantidad WHERE idinsumo=idinsumo.

Tabla insumos: idsumo, stock
Tabla detallefactura: proveedor, iddetalle, idinsumo , cantidad.

pero no me está saliendo la function!! que en realidad no se como hacerla

algo así sería el trigger (creo):

CREATE TRIGGER tri_actualizar_stock
AFTER INSERT ON insumos
FOR EACH ROW EXECUTE FUNCTION actualizar_stock(insumo text, cantidad integer);

Otra cosa.. los parámetros que le mando desde el trigger a la función tienen que ser LOS NOMBRES DE LAS COLUMNAS DE detallefactura?

mientras sigo mirando el foro................gracias

Última edición por FiruzzZ; 30/08/2009 a las 17:37
  #2 (permalink)  
Antiguo 30/08/2009, 17:31
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: triggers funciones ( como crear una y usarla )

algo así es mi idea.. pero aún no me sale (N)

CREATE FUNCTION actu_stock(IN insumo text, IN cantidad integer) RETURNS void AS
BEGIN
UPDATE insumos
SET insumos.stock = insumos.stock + cantidad
WHERE insumos.codinsumo = insumo
END;
  #3 (permalink)  
Antiguo 30/08/2009, 20:01
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: triggers funciones ( como crear una y usarla )

postgresql?

La función debe devolver como parámetro el trigger.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 01/09/2009, 11:41
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: triggers funciones ( como crear una y usarla )

no me sale...

CREATE OR REPLACE FUNCTION stockeando(insumo text, cantidad integer) RETURNS "trigger" AS $$
begin
UPDATE insumos
SET stock = stock + $2
WHERE codinsumo = $1
return new;
end;
$$
LANGUAGE 'plpgsql';

create trigger tri_stock after insert on insumos
for each row execute procedure stockeando(codinsumo, cantidad);

eso fue mi último intento
  #5 (permalink)  
Antiguo 01/09/2009, 12:30
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: triggers funciones ( como crear una y usarla )

sale error?

No estoy seguro, pero si haces uso de las variables $1 y $2 la función debe ser declarada sin el nombre de los parametros de entrada. lo otro es que cambies

UPDATE insumos
SET stock = (stock + cantidad)
WHERE codinsumo = insumo;


dinos que errores se presentan
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 01/09/2009, 12:49
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: triggers funciones ( como crear una y usarla )

ya está .. le tuve q preguntar al capo mafia del sql (un amigo)..
hay vaaaaaaaaaaaaarias cosas q faltaba..
como agregar el lenguaje plpgsql..
usar NEW.parametro. en el trigger y la función..
y agregar todo a la DB específica..

y yo que pensé q Java era mañoso.. :@


PD: no huesos.. se puede usar $n aunque estas tengan un nombre declarado.
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 07:43.