Copyright Oracle Corporation, All rights reserved. 11 Creación de Vistas
11-2 Copyright Oracle Corporation, All rights reserved. Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir una Vista Crear una vista Recupera datos a través de una vista Alterar la definición de una vista Insertar, modificar y borrar datos a través de una vista Eliminación de vistas Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir una Vista Crear una vista Recupera datos a través de una vista Alterar la definición de una vista Insertar, modificar y borrar datos a través de una vista Eliminación de vistas
11-3 Copyright Oracle Corporation, All rights reserved. Objetos de la base de datos ObjectoDescripción TablaUnidad básica de almacenamiento; compuesta de registros y columnas. VistaLógicamente representa un subconjunto de una o más tablas. SecuenciaGenera valores para claves primarias. IndiceMejoran el rendimiento de algunas consultas SinónimoDa nombres alternativos a los objetos.
11-4 Copyright Oracle Corporation, All rights reserved. ¿Qué es una vista? EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO KING PRESIDENT 17-NOV BLAKE MANAGER MAY CLARK MANAGER JUN JONES MANAGER APR MARTIN SALESMAN SEP ALLEN SALESMAN FEB TURNER SALESMAN SEP JAMES CLERK DEC WARD SALESMAN FEB FORD ANALYST DEC SMITH CLERK DEC SCOTT ANALYST DEC ADAMS CLERK JAN MILLER CLERK JAN EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO KING PRESIDENT 17-NOV BLAKE MANAGER MAY CLARK MANAGER JUN JONES MANAGER APR MARTIN SALESMAN SEP ALLEN SALESMAN FEB TURNER SALESMAN SEP JAMES CLERK DEC WARD SALESMAN FEB FORD ANALYST DEC SMITH CLERK DEC SCOTT ANALYST DEC ADAMS CLERK JAN MILLER CLERK JAN EMP Table EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO KING PRESIDENT 17-NOV CLARK MANAGER JUN MILLER CLERK JAN JONES MANAGER APR SCOTT ANALYST DEC ADAMS CLERK JAN SMITH CLERK DEC FORD ANALYST DEC BLAKE MANAGER MAY MARTIN SALESMAN SEP ALLEN SALESMAN FEB TURNER SALESMAN SEP JAMES CLERK DEC WARD SALESMAN FEB EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO KING PRESIDENT 17-NOV CLARK MANAGER JUN MILLER CLERK JAN JONES MANAGER APR SCOTT ANALYST DEC ADAMS CLERK JAN SMITH CLERK DEC FORD ANALYST DEC BLAKE MANAGER MAY MARTIN SALESMAN SEP ALLEN SALESMAN FEB TURNER SALESMAN SEP JAMES CLERK DEC WARD SALESMAN FEB EMPNO ENAME JOB KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK EMPVU10 View EMPVU10 View
11-5 Copyright Oracle Corporation, All rights reserved. ¿Por qué usar vistas? Para restringir el acceso a la BBDD. Para realizar consultas complejas fácilmente. Para la independencia de los datos. Para presentar diferentes vistas de los mismos datos. Para restringir el acceso a la BBDD. Para realizar consultas complejas fácilmente. Para la independencia de los datos. Para presentar diferentes vistas de los mismos datos.
11-6 Copyright Oracle Corporation, All rights reserved. Vistas simples y vistas complejas CaracterísticaVis. SimplesVis. Complejas Nº de TablasUnaUna o más Contiene funcionesNoSí Contiene grup. de datosNoSí DML a través de la vista SíNo siempre CaracterísticaVis. SimplesVis. Complejas Nº de TablasUnaUna o más Contiene funcionesNoSí Contiene grup. de datosNoSí DML a través de la vista SíNo siempre
11-7 Copyright Oracle Corporation, All rights reserved. Creación de una vista Puede incluir una subconsulta dentro de la sentencia CREATE VIEW. La subconsulta puede contener una SELECT compleja. La subconsulta no puede contener la claúsula ORDER BY. Puede incluir una subconsulta dentro de la sentencia CREATE VIEW. La subconsulta puede contener una SELECT compleja. La subconsulta no puede contener la claúsula ORDER BY. CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY]
11-8 Copyright Oracle Corporation, All rights reserved. Creación de una vista Cree una vista, EMPVU10, que contenga detalles de los empleados del dpto. 10 Describa la estructura de la vista, usando el comando DESCRIBE de SQL*Plus. SQL> DESCRIBE empvu10 SQL> CREATE VIEW empvu10 2 AS SELECTempno, ename, job 4 FROMemp 5 WHEREdeptno = 10; View created.
11-9 Copyright Oracle Corporation, All rights reserved. Creación de una vista Cree una vista usando alias de columna en la subconsulta. Seleccione las columnas de esta vista, haciendo uso del nombre del alias. Cree una vista usando alias de columna en la subconsulta. Seleccione las columnas de esta vista, haciendo uso del nombre del alias. SQL> CREATE VIEW salvu30 2 AS SELECTempno EMPLOYEE_NUMBER, ename NAME, 3sal SALARY 4 FROMemp 5 WHEREdeptno = 30; View created.
11-10 Copyright Oracle Corporation, All rights reserved. Recuperando datos de una vista EMPLOYEE_NUMBER NAME SALARY BLAKE MARTIN ALLEN TURNER JAMES WARD rows selected. EMPLOYEE_NUMBER NAME SALARY BLAKE MARTIN ALLEN TURNER JAMES WARD rows selected. SQL> SELECT * 2 FROMsalvu30;
11-11 Copyright Oracle Corporation, All rights reserved. Consulta a la tabla del diccionario de datos, USER_VIEWS USER_VIEWS USER_VIEWS EMPVU10 SELECTempno, ename, job FROMemp WHEREdeptno = 10; USER_VIEWS USER_VIEWS EMPVU10 SELECTempno, ename, job FROMemp WHEREdeptno = 10; SQL*Plus SELECT * FROM empvu10; EMP 7839KINGPRESIDENT 7782CLARKMANAGER 7934MILLERCLERK
11-12 Copyright Oracle Corporation, All rights reserved. Modificación de una vista Modificar la vista EMPVU10 por medio de la claúsula CREATE OR REPLACE VIEW. Añada un alias para cada columna. Los alias de columna en la claúsula CREATE VIEW, deberán de aparecer en el mismo orden que las columnas en la subconsulta. Modificar la vista EMPVU10 por medio de la claúsula CREATE OR REPLACE VIEW. Añada un alias para cada columna. Los alias de columna en la claúsula CREATE VIEW, deberán de aparecer en el mismo orden que las columnas en la subconsulta. SQL> CREATE OR REPLACE VIEW empvu10 2 (employee_number, employee_name, job_title) 3 AS SELECT empno, ename, job 4 FROMemp 5 WHEREdeptno = 10; View created.
11-13 Copyright Oracle Corporation, All rights reserved. Creación de una vista compleja Cree una vista compleja que contenga funciones de grupo, para ver valores de dos tablas. SQL> CREATE VIEWdept_sum_vu 2 (name, minsal, maxsal, avgsal) 3 AS SELECTd.dname, MIN(e.sal), MAX(e.sal), 4AVG(e.sal) 5 FROMemp e, dept d 6 WHEREe.deptno = d.deptno 7 GROUP BY d.dname; View created.
11-14 Copyright Oracle Corporation, All rights reserved. Reglas para realizar operaciones DML sobre vistas Se pueden realizar operaciones DML sobre vistas simples. Se pueden realizar operaciones DML sobre vistas simples. No se puede eliminar una fila si la vista contiene: No se puede eliminar una fila si la vista contiene: – Funciones de grupo. – Una cláusula GROUP BY. – El comando DISTINCT.
11-15 Copyright Oracle Corporation, All rights reserved. Reglas para realizar operaciones DML sobre vistas No es posible modificar datos en la vista si la misma contiene: No es posible modificar datos en la vista si la misma contiene: – Cualquiera de las condiciones anteriores. – Columnas definidas por expresiones. – La pseudocolumna ROWNUM. No se puede agregar datos si la vista contiene: No se puede agregar datos si la vista contiene: – Cualquiera de las condiciones anteriores. – Cualquier columna NOT NULL no incluída por la vista, de la tabla origen. No es posible modificar datos en la vista si la misma contiene: No es posible modificar datos en la vista si la misma contiene: – Cualquiera de las condiciones anteriores. – Columnas definidas por expresiones. – La pseudocolumna ROWNUM. No se puede agregar datos si la vista contiene: No se puede agregar datos si la vista contiene: – Cualquiera de las condiciones anteriores. – Cualquier columna NOT NULL no incluída por la vista, de la tabla origen.
11-16 Copyright Oracle Corporation, All rights reserved. La claúsula WITH CHECK OPTION Asegura que un comando DML sobre la vista mantiene el dominio de la misma.Asegura que un comando DML sobre la vista mantiene el dominio de la misma. Si se intenta cambiar el número de departamento para cualquier fila, la sentencia fallará porque viola la restricción de CHECK OPTION.Si se intenta cambiar el número de departamento para cualquier fila, la sentencia fallará porque viola la restricción de CHECK OPTION. Asegura que un comando DML sobre la vista mantiene el dominio de la misma.Asegura que un comando DML sobre la vista mantiene el dominio de la misma. Si se intenta cambiar el número de departamento para cualquier fila, la sentencia fallará porque viola la restricción de CHECK OPTION.Si se intenta cambiar el número de departamento para cualquier fila, la sentencia fallará porque viola la restricción de CHECK OPTION. SQL> CREATE OR REPLACE VIEW empvu20 2 AS SELECT* 3 FROMemp 4 WHEREdeptno = 20 5 WITH CHECK OPTION CONSTRAINT empvu20_ck; View created.
11-17 Copyright Oracle Corporation, All rights reserved. Denegar operaciones DML Agregando la opción WITH READ ONLY en la definición de la vista, se asegura que no ocurran operaciones DML.Agregando la opción WITH READ ONLY en la definición de la vista, se asegura que no ocurran operaciones DML. Si se intenta realizar una operación DML sobre cualquier fila en la vista, mostrará error.Si se intenta realizar una operación DML sobre cualquier fila en la vista, mostrará error. Agregando la opción WITH READ ONLY en la definición de la vista, se asegura que no ocurran operaciones DML.Agregando la opción WITH READ ONLY en la definición de la vista, se asegura que no ocurran operaciones DML. Si se intenta realizar una operación DML sobre cualquier fila en la vista, mostrará error.Si se intenta realizar una operación DML sobre cualquier fila en la vista, mostrará error. SQL> CREATE OR REPLACE VIEW empvu10 2 (employee_number, employee_name, job_title) 3 AS SELECTempno, ename, job 4 FROMemp 5 WHEREdeptno = 10 6 WITH READ ONLY; View created.
11-18 Copyright Oracle Corporation, All rights reserved. Eliminación de una vista Al Borrar una vista no perderá los datos, porque la vista está basada en tablas subyacentes de la B.D. SQL> DROP VIEW empvu10; View dropped. DROP VIEW view;
11-19 Copyright Oracle Corporation, All rights reserved. Vistas en línea Una vista en línea es una subconsulta con un alias (o nombre de correlación) que puede utilizar dentro de una sentencia SQL. Una vista en línea es una subconsulta con un alias (o nombre de correlación) que puede utilizar dentro de una sentencia SQL. Una subconsulta especificada en la cláusula FROM de la consulta principal es un ejemplo de vista en línea. Una subconsulta especificada en la cláusula FROM de la consulta principal es un ejemplo de vista en línea. Una vista en línea no es un objeto de esquema. Una vista en línea no es un objeto de esquema. Una vista en línea es una subconsulta con un alias (o nombre de correlación) que puede utilizar dentro de una sentencia SQL. Una vista en línea es una subconsulta con un alias (o nombre de correlación) que puede utilizar dentro de una sentencia SQL. Una subconsulta especificada en la cláusula FROM de la consulta principal es un ejemplo de vista en línea. Una subconsulta especificada en la cláusula FROM de la consulta principal es un ejemplo de vista en línea. Una vista en línea no es un objeto de esquema. Una vista en línea no es un objeto de esquema.
11-20 Copyright Oracle Corporation, All rights reserved. Vistas en línea SQL> SELECT a.last_name, b.maxsal FROM employees a, SELECT deparment_id, max(salary) maxsal FROM employees GROUP BY department_id) b WHERE a.department_id=b.deparment_id AND a.salary < b.maxsal;
11-21 Copyright Oracle Corporation, All rights reserved. Resumen Una vista se deriva de los datos de otras tablas u otras vistas. Una vista se deriva de los datos de otras tablas u otras vistas. Una vista es como una ventana sobre los datos subyacentes. Una vista es como una ventana sobre los datos subyacentes. Una vista provee las siguientes ventajas: Una vista provee las siguientes ventajas: – Restricción del acceso a los datos. – Simplificación de las consultas. – Independencia de los datos. – Permite varias visiones de los mismos datos. – Puede ser eliminada sin borrar los datos subyacentes. Una vista se deriva de los datos de otras tablas u otras vistas. Una vista se deriva de los datos de otras tablas u otras vistas. Una vista es como una ventana sobre los datos subyacentes. Una vista es como una ventana sobre los datos subyacentes. Una vista provee las siguientes ventajas: Una vista provee las siguientes ventajas: – Restricción del acceso a los datos. – Simplificación de las consultas. – Independencia de los datos. – Permite varias visiones de los mismos datos. – Puede ser eliminada sin borrar los datos subyacentes.
11-22 Copyright Oracle Corporation, All rights reserved. Visión general de la práctica Crear una vista simple. Crear una vista simple. Crear una vista compleja. Crear una vista compleja. Crear una vista con una restricción check. Crear una vista con una restricción check. Intentar modificar datos en una vista. Intentar modificar datos en una vista. Mostrar definiciones de una vista. Mostrar definiciones de una vista. Eliminar vistas. Eliminar vistas. Crear una vista simple. Crear una vista simple. Crear una vista compleja. Crear una vista compleja. Crear una vista con una restricción check. Crear una vista con una restricción check. Intentar modificar datos en una vista. Intentar modificar datos en una vista. Mostrar definiciones de una vista. Mostrar definiciones de una vista. Eliminar vistas. Eliminar vistas.