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

Triggers

Estas en el tema de Triggers en el foro de Bases de Datos General en Foros del Web. Saludos gentita, dejo el siguiente codigo: ALTER TRIGGER TG_SALDOCLIENTE ON PEDIDO FOR INSERT AS BEGIN UPDATE CUENTA SET SALDO=SALDO-INSERTED.TOTAL FROM INSERTED INNER JOIN CUENTA ON ...
  #1 (permalink)  
Antiguo 09/06/2010, 08:17
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 15 años, 6 meses
Puntos: 0
Sonrisa Triggers

Saludos gentita, dejo el siguiente codigo:

ALTER TRIGGER TG_SALDOCLIENTE
ON PEDIDO
FOR INSERT
AS
BEGIN
UPDATE CUENTA SET SALDO=SALDO-INSERTED.TOTAL FROM INSERTED
INNER JOIN CUENTA ON INSERTED.IDCLIENTE=CUENTA.IDCLIENTE
END

-- TABLAS
PEDIDOS
IDPE, IDCLI, IDPRO, TOTAL

CUENTAS
IDCU, IDCLI, MONTO
--EL TRIGGER HACE, AL INSERTAR UN PEDIDO, SE ACTUALIZA EL MONTO DE LA CUENTA MENOS EL TOTAL DE PEDIDO UNIENDO POR EL IDCLI.
-- LA PREGUNTA ES: SI SE INSERTAR UN PEDIDO MAYOR AL MONTO DE CUENTA, QUE ME SALGA UN MENSAJE. COMO LO ARIA?
-- SE AGRADECE CUALQUIER APOYO.
  #2 (permalink)  
Antiguo 09/06/2010, 08:25
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

que tal frankjoel
2 cosas.

Alter trigger no soporta sintacticamente lo que tratas de hacer. Creo que te refieres a CREATE TRIGGER.
Todo tipo de validaciones de entrada de datos a la base de datos se deben hacer antes de enviarselas a la misma. Esto no es una tarea que le corresponda al trigger. Haz las validaciones desde la aplicación, o bien, desde una función de la base de datos.

a proposito... que DBMS usas?


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 09/06/2010, 16:01
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Triggers

Microsoft sql server... . ..
  #4 (permalink)  
Antiguo 10/06/2010, 08:57
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 15 años, 6 meses
Puntos: 0
Sonrisa Triggers

Saludos huesos52
pues lamento decirte que si se puede. .. con paciencia y buen humor. dejo el código para quienes lo necesiten en un futuro.

CREATE TRIGGER TR_VALIDAR_PEDIDO
ON PEDIDO
FOR INSERT
AS
DECLARE @SALDOCUENTA INT
SELECT @SALDOCUENTA=SALDO FROM CUENTA INNER JOIN INSERTED ON
CUENTA.IDCLIENTE=INSERTED.IDCLIENTE WHERE CUENTA.IDCLIENTE=INSERTED.IDCLIENTE
IF(@SALDOCUENTA>=(SELECT TOTAL FROM INSERTED))
UPDATE CUENTA SET SALDO=CUENTA.SALDO-INSERTED.TOTAL FROM INSERTED
INNER JOIN CUENTA ON CUENTA.IDCLIENTE=INSERTED.IDCLIENTE WHERE CUENTA.IDCLIENTE=INSERTED.IDCLIENTE
ELSE
BEGIN
PRINT('NO HAY SUFICIENTE SALDO')
ROLLBACK TRANSACTION
END
--- AHORA RENACE UNA NUEVA PREGUNTA. SE PODRA HACER LO MISMO CON CURSORES?, SI FUERA ASI ME PODRIAN APOYAR CON LA SINTAXIS O ALGUN EJEMPLO PEQUEÑO.
  #5 (permalink)  
Antiguo 10/06/2010, 09:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Triggers

frankjoel86: Todo depende de qué DBMS estés usando. No todos dejan hacer las mismas cosas.
Las sintaxis no son portables en las rutinas programadas..
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 12/06/2010, 15:06
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Triggers

Teneis razon gnzsoloyo, son son rutinas programadas. Se agradece la aclaración, tengo la siguiente duda, como se puede hacer una funcion en sql. se agradece anticipadamente la respuesta.

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:55.