sql >> Base de Datos >  >> RDS >> Oracle

En Oracle, ¿es posible INSERTAR o ACTUALIZAR un registro a través de una vista?

Vistas en Oracle pueden ser actualizable bajo condiciones específicas. Puede ser complicado y normalmente no es aconsejable.

De la referencia SQL de Oracle 10g:

Notas sobre vistas actualizables

Una vista actualizable es una que puede usar para insertar, actualizar o eliminar filas de la tabla base. Puede crear una vista para que sea inherentemente actualizable, o puede crear un disparador INSTEAD OF en cualquier vista para que sea actualizable.

Para saber si se pueden modificar las columnas de una vista inherentemente actualizable y de qué manera, consulte la vista del diccionario de datos USER_UPDATABLE_COLUMNS. La información que muestra esta vista solo es significativa para las vistas inherentemente actualizables. Para que una vista sea inherentemente actualizable, se deben cumplir las siguientes condiciones:

  • Cada columna de la vista debe asignarse a una columna de una sola tabla. Por ejemplo, si una columna de vista se asigna a la salida de una cláusula TABLE (una colección no anidada), entonces la vista no es inherentemente actualizable.
  • La vista no debe contener ninguna de las siguientes construcciones:
    • Un operador de conjuntos
    • un operador DISTINTO
    • Una función agregada o analítica
    • Cláusula GROUP BY, ORDER BY, MODEL, CONNECT BY o START WITH
    • Una expresión de colección en una lista SELECT
    • Una subconsulta en una lista SELECT
    • Una subconsulta designada CON SOLO LECTURA
    • Se une, con algunas excepciones, como se documenta en la Guía del administrador de la base de datos de Oracle

Además, si una vista inherentemente actualizable contiene pseudocolumnas o expresiones, entonces no puede actualizar las filas de la tabla base con una instrucción UPDATE que haga referencia a cualquiera de estas pseudocolumnas o expresiones.

Si desea que una vista de combinación sea actualizable, todas las siguientes condiciones deben cumplirse:

  • La instrucción DML debe afectar solo a una tabla subyacente a la combinación.
  • Para una instrucción INSERT, la vista no debe crearse CON OPCIÓN DE COMPROBACIÓN, y todas las columnas en las que se insertan valores deben provenir de una tabla con clave conservada. Una tabla con clave conservada es aquella en la que cada clave principal o valor de clave única en la tabla base también es único en la vista de combinación.
  • Para una instrucción UPDATE, todas las columnas actualizadas deben extraerse de una tabla con clave preservada. Si la vista se creó CON OPCIÓN DE COMPROBACIÓN, las columnas unidas y las columnas tomadas de tablas a las que se hace referencia más de una vez en la vista deben protegerse de la ACTUALIZACIÓN.
  • Para una declaración DELETE, si la unión da como resultado más de una tabla con clave preservada, Oracle Database elimina de la primera tabla nombrada en la cláusula FROM, ya sea que la vista se haya creado CON OPCIÓN DE VERIFICACIÓN o no.