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

[SOLUCIONADO] Reglas para update y delete en vistas

Estas en el tema de Reglas para update y delete en vistas en el foro de PostgreSQL en Foros del Web. Buenas noches, estoy aprendiendo sobre las vistas, y necesito poder usar el insert, update y delete, para esto necesité hacer reglas, por lo que estas ...
  #1 (permalink)  
Antiguo 24/10/2013, 19:35
Avatar de paula23andrea  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 12 años
Puntos: 1
Pregunta Reglas para update y delete en vistas

Buenas noches, estoy aprendiendo sobre las vistas, y necesito poder usar el insert, update y delete, para esto necesité hacer reglas, por lo que estas ediciones se hacen sobre la tabla base. Ahora, el problema radica en que formulé las reglas y el motor me las aceptó, el insert funciona, pero el update y el delete no...
Quisiera saber si alguien conoce más acerca del tema y me ayuda a encontrar el error 'lógico' de las reglas...

Código SQL:
Ver original
  1. CREATE OR REPLACE VIEW vista1 AS (SELECT titulo, id_obra FROM obra WHERE precio_peso <= ALL (SELECT precio_peso FROM obra WHERE ciudad = 'Medellin'));

Aquí creé la vista, de acuerdo a la base de datos que tengo, y si la selecciono me bota los datos correctos.

Código SQL:
Ver original
  1. CREATE OR REPLACE RULE para_vista AS ON INSERT TO vista1 DO INSTEAD INSERT INTO obra (titulo, id_obra) VALUES (NEW.titulo, NEW.id_obra);
  2.  
  3.  
  4. CREATE OR REPLACE RULE para_vista_update AS ON UPDATE TO vista1 DO INSTEAD UPDATE obra SET titulo=NEW.titulo, id_obra=NEW.id_obra;
  5.  
  6.  
  7. CREATE OR REPLACE RULE para_vista_delete AS ON DELETE TO vista1 DO INSTEAD DELETE FROM obra WHERE id_obra=OLD.id_obra;

Y esas son las reglas que formulé para poder usar las sentencias:

Código SQL:
Ver original
  1. INSERT INTO vista1 VALUES ('Hola!', 002);
  2.  
  3. UPDATE vista1 SET titulo = 'Chao' WHERE id_obra=002;
  4.  
  5. DELETE FROM vista1 WHERE titulo=’chao’ AND id_obra=002;


Muchas gracias!
__________________
Suerte!!
  #2 (permalink)  
Antiguo 07/11/2013, 17:23
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Reglas para update y delete en vistas

<saludos>
Hola, bueno creo que el tema por el cual el update y el delete no presentan el comportamiento que esperas es por reglas, así que vayamos por partes

1. Al hacer el insert

INSERT INTO vista1 VALUES ('Hola!', 002);

En la tabla obra, los campos precio_peso y ciudad quedan con valor NULL (teorizando que no tienes valores por defecto)
Ahora bien, si en este punto ejecutas el select a vista1, el dato viene?

Si no viene, es porque no cumple la condición de la vista, es decir, que precio_peso no es menor o igual a los precio_peso de Medellin (pues es NULL, para que viniese en la vista, sería darle un valor 0 por default por ej en la columna precio_peso para que no quede como NULL sino como 0)

Y ya con esto, ahora si debería funcionar tanto el update como el delete,
pues para que afecte registros el update o el delete de la vista, el dato debe
estar dentro del dominio de la vista.

Espero no haber sido muy enredado, y que me hayas entendido.
Suerte con eso!!!

P.D: Una cosa más, en el update como lo tienes actualmente, afectas a todos los datos de la vista.
Si quisieras afectar solo el que estás actualizando podrías cambiar la regla así


Código SQL:
Ver original
  1. CREATE OR REPLACE RULE para_vista_update AS ON UPDATE TO vista1 DO INSTEAD UPDATE obra SET titulo=NEW.titulo WHERE id_obra = NEW.id_obra;

</saludos>


__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 07/11/2013 a las 17:26 Razón: P.D
  #3 (permalink)  
Antiguo 07/11/2013, 18:14
Avatar de paula23andrea  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 12 años
Puntos: 1
Respuesta: Reglas para update y delete en vistas

Hola, muchas gracias por responder...
Ya había solucionado el asunto aunque no de forma muy clara, solo añadí una sentencia where a la regla del update, y lo demás ya funcionó xD
Sin embargo es muy útil la información que me das y lo tendré en cuenta y en mis trabajos actuales con bases de datos! :D

Etiquetas: delete, reglas, update, vistas
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 11:22.