Inserciones y actualizaciones de datos mediante vistas
Si define una vista en una sola tabla, puede hacer referencia al nombre de una vista en operaciones de inserción, actualización o supresión. Si la vista es compleja o implica varias tablas, debe definir un desencadenante INSTEAD OF para poder hacer referencia a esta vista en una sentencia INSERT, UPDATE, MERGE o DELETE. Esta información explica cómo se trata el caso simple, donde Db2 realiza una inserción o actualización en la tabla base.
Para asegurarse de que la inserción o actualización se ajusta a la definición de vista, especifique la cláusula WITH CHECK OPTION. El ejemplo siguiente ilustra algunos resultados no deseables al omitir esta comprobación.
ejemplos
- Ejemplo
- Suponga que define una vista, V1,
del modo siguiente:
CREATE VIEW V1 AS SELECT * FROM EMP WHERE DEPT LIKE 'D%'Un usuario con el privilegio SELECT sobre la vista V1 puede ver la información de la tabla EMP para los empleados de los departamentos cuyos ID empiezan con D. La tabla EMP únicamente tiene un departamento (D11) con un ID que cumple la condición.
Suponga que un usuario tiene el privilegio INSERT sobre la vista V1. Un usuario con los privilegios SELECT e INSERT puede insertar una fila para el departamento E01, quizás erróneamente, pero no puede seleccionar la fila que se acaba de insertar.
- Ejemplo
- En el ejemplo siguiente se muestra un modo alternativo para definir la vista
V1. Puede evitar la situación en que un
valor que no coincide con la definición de vista se inserta en la tabla base. Para
ello, en su lugar defina la vista V1 para incluir la cláusula WITH CHECK OPTION:
CREATE VIEW V1 AS SELECT * FROM EMP WHERE DEPT LIKE 'D%' WITH CHECK OPTION;Con la nueva definición, cualquier inserción o actualización en la vista V1 debe cumplir el predicado contenido en la cláusula WHERE: DEPT LIKE 'D%'. La comprobación puede ser útil, pero también tiene un coste de proceso; cada inserción o actualización potencial debe comprobarse en la definición de vista. Por lo tanto, debe sopesar la ventaja de proteger la integridad de los datos y la desventaja de la degradación del rendimiento.