Archivado en la categoría 'Oracle'



Carlos A. García

With check option

Autor: Carlos A. García. Archivado en Oracle
08/Jun/2010  

Después de las tablas, las vistas son las estructuras más utilizadas en bases de datos Oracle. Las ventajas respecto a utilizar directamente las tablas son muchas: nos permite filtrar la información dependiendo del usuario (sí, también se puede hacer con DBMS_RLT, pero esa es otra historia), “esconder” columnas dependiendo de quien haga la consulta, mostrar valores calculados, etc.
En un gran número de casos, las vistas son utilizadas únicamente como sistema de consulta. Es decir, defino qué información voy a mostrar y escribo la consulta que la obtiene. Este es el comportamiento más “lógico”, ya que al fin y al cabo, las vistas no son más que una SELECT almacenada en la base de datos.
Las vistas, definidas tanto de forma explícita como implícita, pueden ser utilicidas para realizar operaciones DML a través de ellas (siempre que cumplan una serie de condiciones). No voy a entrar en el fondo de la cuestión, ya que supondría irme por las ramas. Simplemente, basta que se entienda que se puede realizar cualquier operación de modificación de datos a partir de la vista:

create view v_emp as select * from employees …

Un ejemplo de lo que digo podría ser:

insert into v_emp (employee_id, first_name, …) values (232, ‘Pepito’, …);

Pues bien. La pregunta es ¿Qué pasa si la vista filtra los datos utilizando la cláusula WHERE? ¿Nos permitirá la vista insertar un valor que no cumpla con dicha cláusula? El ejemplo es claro; imaginemos que tenemos una vista que filtra por departamento, de la siguiente forma:

create view v_emp as select * from employees where department_id = 60;

¿Podremos insertar un empleado de un departamento diferente al 60? En contra de toda lógica, la respuesta es sí. De esta forma, podemos insertar un empleado que, posteriormente, no podremos consultar. Es muy sencillo, introducimos una fila a la que no tenemos acceso.

Evitaremos esto con la fórmula WITH CHECK OPTION. Escribiendo esta “palabra clave” (sí, es un keyword, aunque sean tres palabras) nos aseguraremos que no se inserta ningún valor que no cumpla con la condición del where. La forma correcta de escribir la vista enterior podría ser:

create view v_emp as select * from employees where department_id = 60 with check option constraint emp_wcp_di;

La cláusula “constraint emp_wcp_di” da nombre a la constraint creada para garantizar el with check option. Es opcional, pero recomendable. Si no lo hacemos, Oracle creará una restricción que tendrá un nombre con la forma SYS_Cn, donde n es un número.

Javier Jofre

Entrega segunda práctica UIB 2010

Autor: Javier Jofre. Archivado en Oracle
26/May/2010  

En resumen, hay que entregar lo siguiente:

  • Modelo Entidad – Relación, diccionario de Datos y documentación del Server model Designer. Scripts de DML (incluyendo todos los objetos de la base de datos que necesitemos). DDL inicial optativo (datos iniciales de ejemplo).
  • Manual de usuario muy detallado y bien estructurado
  • Jerarquía de módulos (Forms) y listados (Reports).
  • CD con los fuentes en el momento de la entrega, o bien, enviarlo por email antes de la corrección.

Javier Jofre

Práctica segundo cuatrimestre UIB 2010

Autor: Javier Jofre. Archivado en Formación, Oracle
28/Abr/2010  

El modelo de datos queda de la siguiente forma. Ahora sólo hay que introducirlo en el Designer para poder acabar generando el código fuente: