PostgreSQL - Problemas con Rules

 
Vista:
Imágen de perfil de valeria

Problemas con Rules

Publicado por valeria (5 intervenciones) el 29/10/2014 04:25:36
Hola, estoy empezando con PostgreSQL por un trabajo para la facultad, estoy teniendo problemas con las Rules:
Tengo que hacer una “Rules” que en el caso de una venta con matrícula de odontólogo 2145 automáticamente le asigne $500 como total de operación.

La rule que hice me quedo así:
1
2
3
CREATE OR REPLACE RULE InsertOper AS ON INSERT TO Tb_Detalle_Operacion
WHERE New.MatriculaOdontologo = 2145
DO INSTEAD (UPDATE Tb_Detalle_Operacion SET TotalOper = 500);


Pero al ejecutarla me modifica en todos los registros de la Tabla Detalle Operacion el campo TotalOper, y ya le he dados vueltas y no puedo lograr que me cumpla la condición del la Matricula.
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
sin imagen de perfil
Val: 14
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Problemas con Rules

Publicado por Rafael Mendoza Espinosa (21 intervenciones) el 29/10/2014 14:12:27
Te falta el where en el UPDATE
1
2
3
4
CREATE OR REPLACE RULE InsertOper
AS ON INSERT TO Tb_Detalle_Operacion
WHERE New.MatriculaOdontologo = 2145
DO INSTEAD (UPDATE Tb_Detalle_Operacion SET TotalOper = 500 WHERE id=New.id);

Supongo que tienes un id de operacion .... o bien lo tienes que reemplazar por el identificador de registro.

Cuentanos como te fue...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de valeria

Problemas con Rules

Publicado por valeria (5 intervenciones) el 29/10/2014 15:15:37
Hola Rafael, gracias por resonder. Ahora al hacer la inserción no me modifica todos los registros pero tampoco me inserta el nuevo registro

1
2
3
CREATE OR REPLACE RULE InsertOper AS ON INSERT TO Tb_Detalle_Operacion
WHERE New.MatriculaOdontologo = 2145
DO INSTEAD (UPDATE Tb_Detalle_Operacion SET TotalOper = 500 WHERE NroOperac = New.NroOperac);

Voy a seguir probando a ver si veo en donde estoy fallando!!
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
Imágen de perfil de valeria

Problemas con Rules

Publicado por valeria (5 intervenciones) el 29/10/2014 16:04:31
Yo de nuevo solo para agradecerte Rafael, ya pude solucionar el problema, fue solo cambiar INSTEAD por ALSO y listo funcionó!!

1
2
3
CREATE OR REPLACE RULE InsertOper AS ON INSERT TO Tb_Detalle_Operacion
WHERE New.MatriculaOdontologo = 2145
DO ALSO (UPDATE Tb_Detalle_Operacion SET TotalOper = 500 WHERE NroOperac = New.NroOperac);

Gracias!!
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