La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna.

Presentaciones similares


Presentación del tema: "Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna."— Transcripción de la presentación:

1 Javier Balbuena / José Manuel Ferrer. Curso / Subconsultas Multi-Columna

2 1-2 Javier Balbuena / José Manuel Ferrer. Curso / Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Escribir una subconsulta multi-columna Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos Escribir una subconsulta en una cláusula FROM. Al completar esta lección, debería ser capaz de hacer lo siguiente: Escribir una subconsulta multi-columna Describir y explicar el comportamiento de las subconsultas cuando se recuperan valores nulos Escribir una subconsulta en una cláusula FROM.

3 1-3 Javier Balbuena / José Manuel Ferrer. Curso / Subconsultas Multi-Columna Consulta Principal MANAGER 10 Subquery SALESMAN 30 MANAGER 10 CLERK 20 La La C. Principal compara MANAGER 10 Valores de una subc. multi-registro y multi-columna SALESMAN 30 MANAGER 10 CLERK 20 con

4 1-4 Javier Balbuena / José Manuel Ferrer. Curso / Usando Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión se correspondan (ambos) con la comisión y salario de cualquier empleado del departamento 30. SQL> SELECTename, deptno, sal, comm 2 FROMemp 3 WHERE (sal, NVL(comm,0)) IN 4 (SELECT sal, NVL(comm,0) 5 FROM emp 6 WHERE deptno = 30); Subconsultas Multi-Columna

5 1-5 Javier Balbuena / José Manuel Ferrer. Curso / Comparaciones entre Columnas Pairwise SALCOMM Nonpairwise SALCOMM

6 1-6 Javier Balbuena / José Manuel Ferrer. Curso / Comparación de Subconsultas Nonpairwise SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30); Visualizar el nombre, nº de departamento, salario y comisión de cualquier empleado cuyo salario y comisión se corresponda con la comisión y salario de cualquier empleado del departamento 30.

7 1-7 Javier Balbuena / José Manuel Ferrer. Curso / Modificación de la Tabla EMP Asuma que el salario y comisión de Clark son modificados. El salario se cambia a 1500$ y la comisión a 300$. ENAME SAL COMM CLARK ALLEN TURNER rows selected.

8 1-8 Javier Balbuena / José Manuel Ferrer. Curso / Subconsulta Pairwise SQL> SELECTename, deptno, sal, comm 2 FROMemp 3 WHERE (sal, NVL(comm,0)) IN 4 (SELECT sal, NVL(comm,0) 5 FROM emp 6 WHERE deptno = 30); ENAME DEPTNO SAL COMM JAMES WARD MARTIN TURNER ALLEN BLAKE rows selected. ENAME DEPTNO SAL COMM JAMES WARD MARTIN TURNER ALLEN BLAKE rows selected.

9 1-9 Javier Balbuena / José Manuel Ferrer. Curso / SQL> SELECT ename,deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30); Subconsulta Nonpairwise ENAME DEPTNO SAL COMM JAMES BLAKE TURNER CLARK rows selected.

10 1-10 Javier Balbuena / José Manuel Ferrer. Curso / Valores Nulos en una Subconsulta SQL> SELECTemployee.ename 2 FROM emp employee 3 WHERE employee.empno NOT IN (SELECT manager.mgr FROM emp manager); no rows selected.

11 1-11 Javier Balbuena / José Manuel Ferrer. Curso / Uso de un Subconsulta en la Cláusula FROM ENAME SAL DEPTNO SALAVG KING JONES SCOTT rows selected. ENAME SAL DEPTNO SALAVG KING JONES SCOTT rows selected. SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;

12 1-12 Javier Balbuena / José Manuel Ferrer. Curso / Resumen Una subconsulta multi-columna devuelve más de una columna. Las comparaciones entre columnas en una comparación multi-columna, pueden ser pairwise o nonpairwise. Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT. Una subconsulta multi-columna devuelve más de una columna. Las comparaciones entre columnas en una comparación multi-columna, pueden ser pairwise o nonpairwise. Una subconsulta multi-columna puede también ser usada en la cláusula FROM de una sentencia SELECT.

13 Javier Balbuena / José Manuel Ferrer. Curso / Manipulación de Datos

14 1-14 Javier Balbuena / José Manuel Ferrer. Curso / Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir cada sentencia DML Describir cada sentencia DML Insertar filas nuevas en una tabla. Insertar filas nuevas en una tabla. Modificar filas de una tabla. Modificar filas de una tabla. Eliminar filas de una tabla. Eliminar filas de una tabla. Explicar el control de transacciones y su importancia. Explicar el control de transacciones y su importancia.

15 1-15 Javier Balbuena / José Manuel Ferrer. Curso / El Lenguaje de Manipulación de Datos Una sentencia DML se ejecuta cuando: – Añade nuevos registros a una tabla – Modifica registros existentes – Elimina registros existentes Una transacción consiste en una colección de sentencias DML que forman una unidad lógica de trabajo. Una sentencia DML se ejecuta cuando: – Añade nuevos registros a una tabla – Modifica registros existentes – Elimina registros existentes Una transacción consiste en una colección de sentencias DML que forman una unidad lógica de trabajo.

16 1-16 Javier Balbuena / José Manuel Ferrer. Curso / Añadir un Nuevo Registro a una Tabla DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON Nuevo Registro 50 DEVELOPMENT DETROIT DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON …insertar un nuevo registro en la tabla DEPT DEVELOPMENT DETROIT

17 1-17 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia INSERT Añadimos nuevos registros a una tabla, por medio de la sentencia INSERT. Mediante esta sintaxis, sólo se inserta un registro al mismo tiempo. Añadimos nuevos registros a una tabla, por medio de la sentencia INSERT. Mediante esta sintaxis, sólo se inserta un registro al mismo tiempo. INSERT INTOtable [(column [, column...])] VALUES(value [, value...]); INSERT INTOtable [(column [, column...])] VALUES(value [, value...]);

18 1-18 Javier Balbuena / José Manuel Ferrer. Curso / Inserción de Nuevos Registros Insertar una nueva fila conteniendo los valores para cada columna. Insertar una nueva fila conteniendo los valores para cada columna. Opcionalmente, se pueden listar las columnas en la cláusula INSERT. Opcionalmente, se pueden listar las columnas en la cláusula INSERT. Colocar los valores en el orden que las columnas tienen en la tabla por defecto. Colocar los valores en el orden que las columnas tienen en la tabla por defecto. Encerrar los valores de datos de tipo carácter y fecha entre comillas simples. Encerrar los valores de datos de tipo carácter y fecha entre comillas simples. Insertar una nueva fila conteniendo los valores para cada columna. Insertar una nueva fila conteniendo los valores para cada columna. Opcionalmente, se pueden listar las columnas en la cláusula INSERT. Opcionalmente, se pueden listar las columnas en la cláusula INSERT. Colocar los valores en el orden que las columnas tienen en la tabla por defecto. Colocar los valores en el orden que las columnas tienen en la tabla por defecto. Encerrar los valores de datos de tipo carácter y fecha entre comillas simples. Encerrar los valores de datos de tipo carácter y fecha entre comillas simples. SQL> INSERT INTOdept (deptno, dname, loc) 2 VALUES(50, 'DEVELOPMENT', 'DETROIT'); 1 row created.

19 1-19 Javier Balbuena / José Manuel Ferrer. Curso / Inserción de Registros con Valores Nulos Método Implícito: Omitir la columna en la lista. Método Implícito: Omitir la columna en la lista. Método Explícito: Especificar la palabra clave NULL o el string vacío ('') en la lista de VALUES. Método Implícito: Omitir la columna en la lista. Método Implícito: Omitir la columna en la lista. Método Explícito: Especificar la palabra clave NULL o el string vacío ('') en la lista de VALUES. SQL> INSERT INTOdept (deptno, dname ) 2 VALUES(60, 'MIS'); 1 row created. SQL> INSERT INTOdept 2 VALUES(70, 'FINANCE', NULL); 1 row created.

20 1-20 Javier Balbuena / José Manuel Ferrer. Curso / Inserción de Valores Especiales La función SYSDATE registra la fecha y hora actual. SQL> INSERT INTOemp (empno, ename, job, 2mgr, hiredate, sal, comm, 3deptno) 4 VALUES(7196, 'GREEN', 'SALESMAN', 57782, SYSDATE, 2000, NULL, 610); 1 row created.

21 1-21 Javier Balbuena / José Manuel Ferrer. Curso / Insertando Valores de Fecha Específicos Añadimos un nuevo empleado: SQL> INSERT INTO emp 2 VALUES (2296,'AROMANO','SALESMAN',7782, 3 TO_DATE('FEB 3,97', 'MON DD, YY'), , NULL, 10); 1 row created. Verificamos la inserción: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO AROMANO SALESMAN FEB

22 1-22 Javier Balbuena / José Manuel Ferrer. Curso / Inserción de Valores por medio de Variables de Sustitución Creamos un script interactivo usando parámetros de sustitución de SQL*Plus: SQL> INSERT INTOdept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location'); 80 Enter value for department_id: 80 EDUCATION Enter value for department_name: EDUCATION ATLANTA Enter value for location: ATLANTA 1 row created.

23 1-23 Javier Balbuena / José Manuel Ferrer. Curso / Creación de un Script con PROMPTS Específicos ACCEPT almacena el valor en una var. PROMPT visualiza el texto especificado. ACCEPT almacena el valor en una var. PROMPT visualiza el texto especificado. ACCEPTdepartment_id PROMPT 'Please enter the - department number:' ACCEPT department_name PROMPT 'Please enter - the department name:' ACCEPTlocation PROMPT 'Please enter the - location:' INSERT INTO dept (deptno, dname, loc) VALUES (&department_id, '&department_name', &location);

24 1-24 Javier Balbuena / José Manuel Ferrer. Curso / Copiando Registros de Otra Tabla Escribir el comando INSERT con una subconsulta (subquery). Escribir el comando INSERT con una subconsulta (subquery). No usar la cláusula VALUES. No usar la cláusula VALUES. Observar que coincida el número de columnas en la cláusula INSERT con las de la subconsulta. Observar que coincida el número de columnas en la cláusula INSERT con las de la subconsulta. Escribir el comando INSERT con una subconsulta (subquery). Escribir el comando INSERT con una subconsulta (subquery). No usar la cláusula VALUES. No usar la cláusula VALUES. Observar que coincida el número de columnas en la cláusula INSERT con las de la subconsulta. Observar que coincida el número de columnas en la cláusula INSERT con las de la subconsulta. SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECTempno, ename, sal, hiredate 3 FROM emp 4 WHEREjob = 'MANAGER'; 3 rows created.

25 1-25 Javier Balbuena / José Manuel Ferrer. Curso / Modificación de Datos en una Tabla EMP …Modificación de …Modificación de un registro en la Tabla EMP… EMP EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER 20...

26 1-26 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia UPDATE Modificamos registros existentes con la sentencia UPDATE Puede afectar a más de un registro al mismo tiempo. Modificamos registros existentes con la sentencia UPDATE Puede afectar a más de un registro al mismo tiempo. UPDATEtable SETcolumn = value [, column = value] [WHERE condition]; UPDATEtable SETcolumn = value [, column = value] [WHERE condition];

27 1-27 Javier Balbuena / José Manuel Ferrer. Curso / Modificación de Registros en una Tabla Los registros a modificar se especifican por medio de la cláusula WHERE Si se omite la cláusula WHERE se modificarían todos los registros de la tabla. Los registros a modificar se especifican por medio de la cláusula WHERE Si se omite la cláusula WHERE se modificarían todos los registros de la tabla. SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated. SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated. SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated.

28 1-28 Javier Balbuena / José Manuel Ferrer. Curso / Proceso de Modificación con Subconsultas Multi-Columna SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698; 1 row updated. Modificar el oficio y departamento del empleado 7698, con los valores correspondientes actualmente al empleado 7499:

29 1-29 Javier Balbuena / José Manuel Ferrer. Curso / Modificación de Registros Basados en Otra Tabla Utilice subconsultas en sentencias UPDATE, para modificar registros de una tabla, basados en valores de otra tabla. SQL>UPDATEemployee 2SETdeptno = (SELECTdeptno 3FROMemp 4WHEREempno = 7788) 5WHEREjob = (SELECTjob 6FROMemp 7WHEREempno = 7788); 2 rows updated. SQL>UPDATEemployee 2SETdeptno = (SELECTdeptno 3FROMemp 4WHEREempno = 7788) 5WHEREjob = (SELECTjob 6FROMemp 7WHEREempno = 7788); 2 rows updated.

30 1-30 Javier Balbuena / José Manuel Ferrer. Curso / UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found SQL> UPDATEemp 2 SETdeptno = 55 3 WHEREdeptno = 10; SQL> UPDATEemp 2 SETdeptno = 55 3 WHEREdeptno = 10; Modificación de Registros: Error de Integridad (Constraints) El Departamento número 55 no existe

31 1-31 Javier Balbuena / José Manuel Ferrer. Curso / …Borramos un registro de la tabla DEPT… Eliminación de Registros de una Tabla DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON 50 DEVELOPMENT DETROIT 60MIS... DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON 60MIS...

32 1-32 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia DELETE Puede eliminar registros existentes de una tabla, por medio de la sentencia DELETE. DELETE [FROM] table [WHERE condition]; DELETE [FROM] table [WHERE condition];

33 1-33 Javier Balbuena / José Manuel Ferrer. Curso / Los registros a eliminar se especifican por medio de la cláusula WHERE Si omite la cláusula WHERE se borrarán todos los registros de la tabla Los registros a eliminar se especifican por medio de la cláusula WHERE Si omite la cláusula WHERE se borrarán todos los registros de la tabla Eliminación de Registros de una Tabla SQL> DELETE FROMdepartment 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted. SQL> DELETE FROMdepartment 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted. SQL> DELETE FROMdepartment; 4 rows deleted. SQL> DELETE FROMdepartment; 4 rows deleted.

34 1-34 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de Registros Basados en Otra Tabla Utilice subconsultas en sentencias DELETE, para eliminar registros de una tabla, basados en valores de otra tabla. SQL> DELETE FROMemployee 2 WHEREdeptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES'); 6 rows deleted.

35 1-35 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de Registros: Error de Integridad (Constraints) SQL> DELETE FROMdept 2 WHEREdeptno = 10; SQL> DELETE FROMdept 2 WHEREdeptno = 10; DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found No puede eliminar un registro que contiene una clave primaria, usada como clave externa en otra tabla No puede eliminar un registro que contiene una clave primaria, usada como clave externa en otra tabla

36 1-36 Javier Balbuena / José Manuel Ferrer. Curso / Transacciones en la Base de Datos Contienen una de las siguientes sentencias: Sentencias DML que deciden un cambio consistente sobre los datos Una sentencia DDL Una sentencia DCL Contienen una de las siguientes sentencias: Sentencias DML que deciden un cambio consistente sobre los datos Una sentencia DDL Una sentencia DCL

37 1-37 Javier Balbuena / José Manuel Ferrer. Curso / Transacciones en la Base de Datos Comienzan cuando se ejecuta el primer comando SQL. Comienzan cuando se ejecuta el primer comando SQL. Finalizan con uno de los siguientes eventos: Finalizan con uno de los siguientes eventos: – COMMIT o ROLLBACK. – Ejecución de un comando DDL o DCL (commit automático). – Errores, salida o caída del sistema. Comienzan cuando se ejecuta el primer comando SQL. Comienzan cuando se ejecuta el primer comando SQL. Finalizan con uno de los siguientes eventos: Finalizan con uno de los siguientes eventos: – COMMIT o ROLLBACK. – Ejecución de un comando DDL o DCL (commit automático). – Errores, salida o caída del sistema.

38 1-38 Javier Balbuena / José Manuel Ferrer. Curso / Ventajas de COMMIT y ROLLBACK Aseguran la consistencia de los datos. Aseguran la consistencia de los datos. Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. Agrupan lógicamente tareas relacionadas entre sí. Agrupan lógicamente tareas relacionadas entre sí. Aseguran la consistencia de los datos. Aseguran la consistencia de los datos. Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. Agrupan lógicamente tareas relacionadas entre sí. Agrupan lógicamente tareas relacionadas entre sí.

39 1-39 Javier Balbuena / José Manuel Ferrer. Curso / DELETE Control de Transacciones TransacciónTransacción Savepoint A ROLLBACK to Savepoint B DELETE Savepoint B COMMIT INSERT UPDATE ROLLBACK to Savepoint A INSERTUPDATE INSERT ROLLBACK INSERT

40 1-40 Javier Balbuena / José Manuel Ferrer. Curso / Un commit automático ocurre bajo una de las siguientes circunstancias: Un commit automático ocurre bajo una de las siguientes circunstancias: – Se emite un comando DDL, tal como CREATE. – Se emite un comando DCL, tal como GRANT. – Una salida normal desde SQL*Plus, sin realizar un COMMIT o ROLLBACK explícitamente. Un rollback automático ocurre bajo una terminación anormal de SQL*Plus o una falla del sistema. Un rollback automático ocurre bajo una terminación anormal de SQL*Plus o una falla del sistema. Un commit automático ocurre bajo una de las siguientes circunstancias: Un commit automático ocurre bajo una de las siguientes circunstancias: – Se emite un comando DDL, tal como CREATE. – Se emite un comando DCL, tal como GRANT. – Una salida normal desde SQL*Plus, sin realizar un COMMIT o ROLLBACK explícitamente. Un rollback automático ocurre bajo una terminación anormal de SQL*Plus o una falla del sistema. Un rollback automático ocurre bajo una terminación anormal de SQL*Plus o una falla del sistema. Proceso Implícito de Transacciones

41 1-41 Javier Balbuena / José Manuel Ferrer. Curso / Estado de los Datos Antes de COMMIT o ROLLBACK El estado previo de los datos puede ser recuperado porque el afectado es el búfer de la base de datos. El estado previo de los datos puede ser recuperado porque el afectado es el búfer de la base de datos. El usuario actual puede revisar los resultados de sus operaciones DML usando la sentencia SELECT. El usuario actual puede revisar los resultados de sus operaciones DML usando la sentencia SELECT. Otros usuarios no pueden ver los resultados de las sentencias DML ejecutadas por el usuario actual. Otros usuarios no pueden ver los resultados de las sentencias DML ejecutadas por el usuario actual. Las filas afectadas son bloqueadas (locked); otros usuarios no pueden cambiar los datos pertenecientes a esas filas. Las filas afectadas son bloqueadas (locked); otros usuarios no pueden cambiar los datos pertenecientes a esas filas. El estado previo de los datos puede ser recuperado porque el afectado es el búfer de la base de datos. El estado previo de los datos puede ser recuperado porque el afectado es el búfer de la base de datos. El usuario actual puede revisar los resultados de sus operaciones DML usando la sentencia SELECT. El usuario actual puede revisar los resultados de sus operaciones DML usando la sentencia SELECT. Otros usuarios no pueden ver los resultados de las sentencias DML ejecutadas por el usuario actual. Otros usuarios no pueden ver los resultados de las sentencias DML ejecutadas por el usuario actual. Las filas afectadas son bloqueadas (locked); otros usuarios no pueden cambiar los datos pertenecientes a esas filas. Las filas afectadas son bloqueadas (locked); otros usuarios no pueden cambiar los datos pertenecientes a esas filas.

42 1-42 Javier Balbuena / José Manuel Ferrer. Curso / Estado de los Datos Después del COMMIT Los cambios en los datos son escritos en la base de datos. Los cambios en los datos son escritos en la base de datos. Los datos anteriores se pierden definitivamente. Los datos anteriores se pierden definitivamente. Todos los usuarios pueden ver los resultados. Todos los usuarios pueden ver los resultados. Se liberan los bloqueos aplicados a las filas afectadas; esas filas están ahora disponibles para que otros usuarios las usen. Se liberan los bloqueos aplicados a las filas afectadas; esas filas están ahora disponibles para que otros usuarios las usen. Se borran todos los savepoints. Se borran todos los savepoints. Los cambios en los datos son escritos en la base de datos. Los cambios en los datos son escritos en la base de datos. Los datos anteriores se pierden definitivamente. Los datos anteriores se pierden definitivamente. Todos los usuarios pueden ver los resultados. Todos los usuarios pueden ver los resultados. Se liberan los bloqueos aplicados a las filas afectadas; esas filas están ahora disponibles para que otros usuarios las usen. Se liberan los bloqueos aplicados a las filas afectadas; esas filas están ahora disponibles para que otros usuarios las usen. Se borran todos los savepoints. Se borran todos los savepoints.

43 1-43 Javier Balbuena / José Manuel Ferrer. Curso / Commit de Datos SQL> UPDATEemp 2 SET deptno = 10 3 WHEREempno = 7782; 1 row updated. SQL> UPDATEemp 2 SET deptno = 10 3 WHEREempno = 7782; 1 row updated. Realizar los cambios: Hacer Commit de los cambios: SQL> COMMIT; Commit complete.

44 1-44 Javier Balbuena / José Manuel Ferrer. Curso / Estado de los Datos Después de Hacer ROLLBACK Se descartan todos los cambios pendientes. Se descartan todos los cambios pendientes. Los cambios en los datos se deshacen. Los cambios en los datos se deshacen. Se restaura el estado previo de los datos. Se restaura el estado previo de los datos. Se levantan todos los bloqueos sobre las filas afectadas. Se levantan todos los bloqueos sobre las filas afectadas. Se descartan todos los cambios pendientes. Se descartan todos los cambios pendientes. Los cambios en los datos se deshacen. Los cambios en los datos se deshacen. Se restaura el estado previo de los datos. Se restaura el estado previo de los datos. Se levantan todos los bloqueos sobre las filas afectadas. Se levantan todos los bloqueos sobre las filas afectadas. SQL> DELETE FROMemployee; 14 rows deleted. SQL> ROLLBACK; Rollback complete.

45 1-45 Javier Balbuena / José Manuel Ferrer. Curso / Hacer ROLLBACK Hasta un Punto de Salvaguarda (Marca) Crear una marca dentro de una transacción usando el comando SAVEPOINT (marca). Crear una marca dentro de una transacción usando el comando SAVEPOINT (marca). Hacer un rollback hacia la marca usando el comando ROLLBACK TO SAVEPOINT. Hacer un rollback hacia la marca usando el comando ROLLBACK TO SAVEPOINT. Crear una marca dentro de una transacción usando el comando SAVEPOINT (marca). Crear una marca dentro de una transacción usando el comando SAVEPOINT (marca). Hacer un rollback hacia la marca usando el comando ROLLBACK TO SAVEPOINT. Hacer un rollback hacia la marca usando el comando ROLLBACK TO SAVEPOINT. SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete.

46 1-46 Javier Balbuena / José Manuel Ferrer. Curso / Rollback a Nivel de Sentencia Si una única sentencia DML falla durante su ejecución, entonces se hace rollback sobre esa sentencia solamente. Si una única sentencia DML falla durante su ejecución, entonces se hace rollback sobre esa sentencia solamente. Oracle8 implementa una marca de seguridad o savepoint implícito. Oracle8 implementa una marca de seguridad o savepoint implícito. Todos los otros cambios se mantienen. Todos los otros cambios se mantienen. El usuario debería terminar explícitamente las transacciones usando una sentencia COMMIT o ROLLBACK. El usuario debería terminar explícitamente las transacciones usando una sentencia COMMIT o ROLLBACK. Si una única sentencia DML falla durante su ejecución, entonces se hace rollback sobre esa sentencia solamente. Si una única sentencia DML falla durante su ejecución, entonces se hace rollback sobre esa sentencia solamente. Oracle8 implementa una marca de seguridad o savepoint implícito. Oracle8 implementa una marca de seguridad o savepoint implícito. Todos los otros cambios se mantienen. Todos los otros cambios se mantienen. El usuario debería terminar explícitamente las transacciones usando una sentencia COMMIT o ROLLBACK. El usuario debería terminar explícitamente las transacciones usando una sentencia COMMIT o ROLLBACK.

47 1-47 Javier Balbuena / José Manuel Ferrer. Curso / Consistencia en Lectura La consistencia en lectura garantiza una vista consistente de los datos en cualquier circunstancia. Los cambios realizados por otro usuario no crean conflictos con los cambios realizados por otro usuario. Asegura que sobre los mismos datos: – Las lecturas no esperan a las escrituras y viceversa. La consistencia en lectura garantiza una vista consistente de los datos en cualquier circunstancia. Los cambios realizados por otro usuario no crean conflictos con los cambios realizados por otro usuario. Asegura que sobre los mismos datos: – Las lecturas no esperan a las escrituras y viceversa.

48 1-48 Javier Balbuena / José Manuel Ferrer. Curso / Implementación de la Consistencia en Lectura update emp set sal = 2000 where ename = 'SCOTT' Bloques de Datos Segmentos de Rollbck select * from emp Datos cambiados y no cambiados Antes de cambiar los datos antiguos Usuario A Usuario B ImagenConsistente en Lectura

49 1-49 Javier Balbuena / José Manuel Ferrer. Curso / Bloqueos Bloqueos en Oracle8: Previenen la intereacción destructiva entre transacciones concurrentes No requieren acciones por parte del usuario Automáticamente utilizan el nivel más bajo de restricción Se mantienen mientras dura la transacción Tienen básicamente dos modos: – Exclusive (exclusivos) – Shared (compartidos) Bloqueos en Oracle8: Previenen la intereacción destructiva entre transacciones concurrentes No requieren acciones por parte del usuario Automáticamente utilizan el nivel más bajo de restricción Se mantienen mientras dura la transacción Tienen básicamente dos modos: – Exclusive (exclusivos) – Shared (compartidos)

50 1-50 Javier Balbuena / José Manuel Ferrer. Curso / Resumen Comando Descripción INSERTAgrega una fila nueva a la tabla. UPDATE Modifica filas de una tabla. DELETE Elimina filas de una tabla. COMMIT Hace permanentes todos los cambios pendientes. SAVEPOINT Permite hacer un rollback hasta la marca de savepoint. ROLLBACK Descarta todos los cambios pendientes de los datos.

51 Javier Balbuena / José Manuel Ferrer. Curso / Creación y Gestión de Tablas

52 1-52 Javier Balbuena / José Manuel Ferrer. Curso / Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir los principales objetos de la B.D. Crear tablas Describir los tipos de datos que se pueden usar al definir una columna Alterar definiciones de tablas Borrar, renombrar y truncar tablas Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir los principales objetos de la B.D. Crear tablas Describir los tipos de datos que se pueden usar al definir una columna Alterar definiciones de tablas Borrar, renombrar y truncar tablas

53 1-53 Javier Balbuena / José Manuel Ferrer. Curso / Objetos de la Base de Datos ObjetoDescripció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.

54 1-54 Javier Balbuena / José Manuel Ferrer. Curso / Reglas para los Nombres Deben comenzar con una letra. Deben comenzar con una letra. Pueden tener una longitud de 1-30 caracteres de largo. Pueden tener una longitud de 1-30 caracteres de largo. Deben contener solamente A–Z, a–z, 0–9, _, $, y # Deben contener solamente A–Z, a–z, 0–9, _, $, y # No deben duplicar el nombre de otro objeto que sea propiedad del mismo usuario. No deben duplicar el nombre de otro objeto que sea propiedad del mismo usuario. No debe ser una palabra reservada del Servidor Oracle8. No debe ser una palabra reservada del Servidor Oracle8. Deben comenzar con una letra. Deben comenzar con una letra. Pueden tener una longitud de 1-30 caracteres de largo. Pueden tener una longitud de 1-30 caracteres de largo. Deben contener solamente A–Z, a–z, 0–9, _, $, y # Deben contener solamente A–Z, a–z, 0–9, _, $, y # No deben duplicar el nombre de otro objeto que sea propiedad del mismo usuario. No deben duplicar el nombre de otro objeto que sea propiedad del mismo usuario. No debe ser una palabra reservada del Servidor Oracle8. No debe ser una palabra reservada del Servidor Oracle8.

55 1-55 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia CREATE TABLE Tiene que tener : – El privilegio CREATE TABLE – Un área de almacenamiento Ha de especificar: – Nombre de tabla – Para las columnas: nombre, tipo de dato y tamaño Tiene que tener : – El privilegio CREATE TABLE – Un área de almacenamiento Ha de especificar: – Nombre de tabla – Para las columnas: nombre, tipo de dato y tamaño CREATE TABLE [schema.]table (column datatype [DEFAULT expr];

56 1-56 Javier Balbuena / José Manuel Ferrer. Curso / Referencia a Tablas de Otros Usuarios Las tablas propiedad de otros usuarios no pertenecen al esquema del usuario. Debe de utilizar como prefijo de la tabla, el nombre del propietario. Las tablas propiedad de otros usuarios no pertenecen al esquema del usuario. Debe de utilizar como prefijo de la tabla, el nombre del propietario.

57 1-57 Javier Balbuena / José Manuel Ferrer. Curso / La Opción DEFAULT … hiredate DATE DEFAULT SYSDATE, … Especifica un valor por defecto para una columna, durante una inserción. Especifica un valor por defecto para una columna, durante una inserción. Los valores permitidos son literales, expresiones, o funciones SQL, tales como SYSDATE o USER. Los valores permitidos son literales, expresiones, o funciones SQL, tales como SYSDATE o USER. No se permiten valores que sean nombres de otra columna o una pseudocolumna. No se permiten valores que sean nombres de otra columna o una pseudocolumna. El valor por defecto debe ser del tipo que tiene definido la columna. El valor por defecto debe ser del tipo que tiene definido la columna.

58 1-58 Javier Balbuena / José Manuel Ferrer. Curso / Creación de Tablas SQL> CREATE TABLE dept 2(deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13)); Table created. Crear la Tabla: Verificar que se ha creado correctamente: SQL> DESCRIBE dept Name Null? Type DEPTNO NOT NULL NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13)

59 1-59 Javier Balbuena / José Manuel Ferrer. Curso / Consultas al Diccionario de Datos Describir tablas propiedad del usuario. Ver distintos tipos de objetos propiedad del usuario. Ver tablas, vistas, sinónimos y secuencias propiedad del usuario. SQL> SELECT* 2FROMuser_tables; SQL> SELECTDISTINCT object_type 2FROM user_objects; SQL> SELECT* 2FROMuser_catalog;

60 1-60 Javier Balbuena / José Manuel Ferrer. Curso / Tipos de Datos Tipo de DatoDescripción VARCHAR2(size)Dato carácter de longitud variable CHAR(size) Dato carácter de longitud fija NUMBER(p,s) Dato numérico de longitud variable DATE Valores de fecha y hora LONG Dato carácter de longitud variable hasta 2 gigabytes CLOBDato carácter single-byte de hasta 4 gigabytes RAW and LONG RAW Datos binarios BLOBDatos binarios hasta 4 gigabytes BFILEDatos binarios almacenados en un fichero externo; hasta 4 gigabytes

61 1-61 Javier Balbuena / José Manuel Ferrer. Curso / Creación de una Tabla por medio de una Subconsulta Crear una tabla e insertar filas combinando el comando CREATE TABLE con la opción AS subquery. Crear una tabla e insertar filas combinando el comando CREATE TABLE con la opción AS subquery. Hacer coincidir la cantidad de columnas especificadas con las columnas del subquery. Hacer coincidir la cantidad de columnas especificadas con las columnas del subquery. Definir las columnas con sus nombres, valores por defecto y restricciones de integridad solamente. Definir las columnas con sus nombres, valores por defecto y restricciones de integridad solamente. Crear una tabla e insertar filas combinando el comando CREATE TABLE con la opción AS subquery. Crear una tabla e insertar filas combinando el comando CREATE TABLE con la opción AS subquery. Hacer coincidir la cantidad de columnas especificadas con las columnas del subquery. Hacer coincidir la cantidad de columnas especificadas con las columnas del subquery. Definir las columnas con sus nombres, valores por defecto y restricciones de integridad solamente. Definir las columnas con sus nombres, valores por defecto y restricciones de integridad solamente. CREATE TABLE table [column(, column...)] AS subquery;

62 1-62 Javier Balbuena / José Manuel Ferrer. Curso / Creación de una Tabla por medio de una Subconsulta Name Null? Type EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) ANNSAL NUMBER HIREDATE DATE Name Null? Type EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) ANNSAL NUMBER HIREDATE DATE SQL> DESCRIBE dept30 SQL> CREATE TABLE dept30 2AS 3SELECT empno, ename, sal*12 ANNSAL, hiredate 4FROM emp 5WHERE deptno = 30; Table created.

63 1-63 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia ALTER TABLE Use la sentencia ALTER TABLE para: Añadir una nueva columna Modificar una columna que ya existe Dar un valor por defecto a una nueva col. Use la sentencia ALTER TABLE para: Añadir una nueva columna Modificar una columna que ya existe Dar un valor por defecto a una nueva col. ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...); ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...);

64 1-64 Javier Balbuena / José Manuel Ferrer. Curso / Añadir una Columna DEPT30 EMPNO ENAME ANNSAL HIREDATE BLAKE MAY MARTIN SEP ALLEN FEB TURNER SEP …añadir una nueva columna a la tabla DEPT30 DEPT30 EMPNO ENAME ANNSAL HIREDATE BLAKE MAY MARTIN SEP ALLEN FEB TURNER SEP JOB Nueva columna

65 1-65 Javier Balbuena / José Manuel Ferrer. Curso / Añadir una Columna Use la cláusula ADD para añadir cols. EMPNO ENAME ANNSAL HIREDATE JOB BLAKE MAY MARTIN SEP ALLEN FEB TURNER SEP rows selected. EMPNO ENAME ANNSAL HIREDATE JOB BLAKE MAY MARTIN SEP ALLEN FEB TURNER SEP rows selected. SQL> ALTER TABLE dept30 2 ADD (job VARCHAR2(9)); Table altered. La nueva columna aparece en último lugar

66 1-66 Javier Balbuena / José Manuel Ferrer. Curso / Modificar una Columna Puede cambiar el tipo de dato de una columna, su tamaño y valor por dflt. Si cambia el valor por defecto, afectará sólo a sucesivas inserciones en la tabla. Puede cambiar el tipo de dato de una columna, su tamaño y valor por dflt. Si cambia el valor por defecto, afectará sólo a sucesivas inserciones en la tabla. ALTER TABLEdept30 MODIFY(ename VARCHAR2(15)); Table altered.

67 1-67 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de una Tabla Se borran todos los datos de la tabla. Cualquier transacción pendiente termina con commit. Todos los índices de la tabla se borran. No puede hacer rollback de la sentencia Se borran todos los datos de la tabla. Cualquier transacción pendiente termina con commit. Todos los índices de la tabla se borran. No puede hacer rollback de la sentencia SQL> DROP TABLE dept30; Table dropped.

68 1-68 Javier Balbuena / José Manuel Ferrer. Curso / Cambiar el Nombre de un Objeto Para cambiar el nombre de una tabla, vista, secuencia o sinónimo, ejecutaremos la instrucción RENAME. Debe ser el propietario del objeto. Para cambiar el nombre de una tabla, vista, secuencia o sinónimo, ejecutaremos la instrucción RENAME. Debe ser el propietario del objeto. SQL> RENAME dept TO department; Table renamed.

69 1-69 Javier Balbuena / José Manuel Ferrer. Curso / Truncar una Tabla La Sentencia TRUNCATE TABLE: – Borra todos los registros de una tabla – Libera todo el espacio de almacenamiento ocupado por la tabla No puede hacer rollback Alternativamente puede borrar los registros, con la sentencia DELETE La Sentencia TRUNCATE TABLE: – Borra todos los registros de una tabla – Libera todo el espacio de almacenamiento ocupado por la tabla No puede hacer rollback Alternativamente puede borrar los registros, con la sentencia DELETE SQL> TRUNCATE TABLE department; Table truncated.

70 1-70 Javier Balbuena / José Manuel Ferrer. Curso / Añadir Comentarios a una Tabla Puede añadir comentarios a una tabla o columna, por medio de la instrucción COMMENT Los comentarios podrá verlos a través de determinadas estructuras del D.D. – ALL_COL_COMMENTS – USER_COL_COMMENTS – ALL_TAB_COMMENTS – USER_TAB_COMMENTS Puede añadir comentarios a una tabla o columna, por medio de la instrucción COMMENT Los comentarios podrá verlos a través de determinadas estructuras del D.D. – ALL_COL_COMMENTS – USER_COL_COMMENTS – ALL_TAB_COMMENTS – USER_TAB_COMMENTS SQL> COMMENT ON TABLE emp 2 IS 'Employee Information'; Comment created.

71 1-71 Javier Balbuena / José Manuel Ferrer. Curso / Resumen SentenciaDescripción CREATE TABLE Creación de tablas. ALTER TABLE Modifica la estructura de una tabla. DROP TABLE Borra la estructura y registros de la tabla RENAME Cambia el nombre de una tabla, vista, secuencia o sinónimo. TRUNCATE Borra todos los registros y libera el espacio ocupados por los registros de la tabla. COMMENT Añade comentarios a una tabla o vista.

72 Javier Balbuena / José Manuel Ferrer. Curso / Constraints (Restricciones)

73 1-73 Javier Balbuena / José Manuel Ferrer. Curso / Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir constraints Crear y mantener constraints Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir constraints Crear y mantener constraints

74 1-74 Javier Balbuena / José Manuel Ferrer. Curso / ¿Qué son las Constraints? Fuerzan reglas a nivel de tabla Las constraints previenen el borrado de una tabla si existen dependencias. Los siguientes tipos de constrainst son válidos en Oracle8: – NOT NULL – UNIQUE Key – PRIMARY KEY – FOREIGN KEY – CHECK Fuerzan reglas a nivel de tabla Las constraints previenen el borrado de una tabla si existen dependencias. Los siguientes tipos de constrainst son válidos en Oracle8: – NOT NULL – UNIQUE Key – PRIMARY KEY – FOREIGN KEY – CHECK

75 1-75 Javier Balbuena / José Manuel Ferrer. Curso / Guía para el Uso de Constraints Asigne un nombre a la restricción, en caso contrario el Server generará uno usando el formato SYS_Cn. Asigne un nombre a la restricción, en caso contrario el Server generará uno usando el formato SYS_Cn. Se puede crear una restricción Se puede crear una restricción – En el momento de crear la tabla. – Después que la tabla ha sido creada. Se puede definir un restricción a nivel de columna o a nivel de tabla. Se puede definir un restricción a nivel de columna o a nivel de tabla. Vea la constraint en el diccionario de datos. Vea la constraint en el diccionario de datos. Asigne un nombre a la restricción, en caso contrario el Server generará uno usando el formato SYS_Cn. Asigne un nombre a la restricción, en caso contrario el Server generará uno usando el formato SYS_Cn. Se puede crear una restricción Se puede crear una restricción – En el momento de crear la tabla. – Después que la tabla ha sido creada. Se puede definir un restricción a nivel de columna o a nivel de tabla. Se puede definir un restricción a nivel de columna o a nivel de tabla. Vea la constraint en el diccionario de datos. Vea la constraint en el diccionario de datos.

76 1-76 Javier Balbuena / José Manuel Ferrer. Curso / Definición de Constraints CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], … [table_constraint]); CREATE TABLE emp( (empno NUMBER(4), ename VARCHAR2(10), … deptno NUMBER(7,2) NOT NULL, CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO));

77 1-77 Javier Balbuena / José Manuel Ferrer. Curso / Definición de Constraints Constraint a nivel de columna: Constraint a nivel de tabla: Constraint a nivel de columna: Constraint a nivel de tabla: column [CONSTRAINT constraint_name] constraint_type, column,... [CONSTRAINT constraint_name] constraint_type (column,...), column,... [CONSTRAINT constraint_name] constraint_type (column,...),

78 1-78 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint NOT NULL Asegura que los valores nulos no serán permitidos para la columna. EMP EMPNO ENAME JOB... COMM DEPTNO 7839KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER NOT NULL constraint (ningún registro podrá contener un valor nulo contener un valor nulo para esta columna) para esta columna) Ausencia de la constraint NOT NULL (cualquier reg. puede contener un valor nulo para esta columna) Constraint NOT NULL

79 1-79 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint NOT NULL Definido a nivel de columna: SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3enameVARCHAR2(10) NOT NULL, 4jobVARCHAR2(9), 5mgrNUMBER(4), 6hiredateDATE, 7salNUMBER(7,2), 8 commNUMBER(7,2), 9deptnoNUMBER(7,2) NOT NULL);

80 1-80 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint UNIQUE Key DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON Constraint UNIQUE key 50SALESDETROIT 60BOSTON Insert into No permitido (DNAME No permitido (DNAME SALES ya existe) permitido

81 1-81 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint UNIQUE Key Definido bien a nivel de tabla o de columna: SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3dnameVARCHAR2(14), 4locVARCHAR2(13), 5CONSTRAINT dept_dname_uk UNIQUE);

82 1-82 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint PRIMARY KEY DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON PRIMARY key Insert into 20MARKETINGDALLAS FINANCENEW YORK No permitido (DEPTNO20 No permitido (DEPTNO 20 ya existe) No permitido (DEPTNO es null)

83 1-83 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint PRIMARY KEY Definido bien a nivel de tabla o de columna: SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3dnameVARCHAR2(14), 4locVARCHAR2(13), 5CONSTRAINT dept_dname_uk UNIQUE, 6CONSTRAINT dept_deptno_pk PRIMARY KEY);

84 1-84 Javier Balbuena / José Manuel Ferrer. Curso / The FOREIGN KEY Constraint DEPT DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS... PRIMARY key EMP EMPNO ENAME JOB... COMM DEPTNO 7839KINGPRESIDENT BLAKEMANAGER FOREIGN key 7571FORDMANAGER FORDMANAGER Insert into No permitido (DEPTNO No permitido (DEPTNO no existe en la tabla DEPT Permitido

85 1-85 Javier Balbuena / José Manuel Ferrer. Curso / The FOREIGN KEY Constraint Definido bien a nivel de tabla o de columna: SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3enameVARCHAR2(10) NOT NULL, 4jobVARCHAR2(9), 5mgrNUMBER(4), 6hiredateDATE, 7salNUMBER(7,2), 8 commNUMBER(7,2), 9deptnoNUMBER(7,2) NOT NULL, 10CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) 11REFERENCES dept (deptno));

86 1-86 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint FOREIGN KEY Palabras Reservadas FOREIGN KEY – Define la columna en la tabla hija a nivel de constraint de tabla REFERENCES – Identifica la tabla y columna en la tabla padre ON DELETE CASCADE – Permite borrar en la tabla padre y borrar registros dependientes de la tabla hija. FOREIGN KEY – Define la columna en la tabla hija a nivel de constraint de tabla REFERENCES – Identifica la tabla y columna en la tabla padre ON DELETE CASCADE – Permite borrar en la tabla padre y borrar registros dependientes de la tabla hija.

87 1-87 Javier Balbuena / José Manuel Ferrer. Curso / La Constraint CHECK Define una condición que debe satisfacer cada fila. Define una condición que debe satisfacer cada fila. Expresiones no permitidas: Expresiones no permitidas: – Referencias a las pseudocolumnas CURRVAL, NEXTVAL, LEVEL, o ROWNUM. – Llamadas a las funciones SYSDATE, UID, USER, o USERENV. – Consultas que se refieran a otros valores en otras filas. Se define o bien como una restricción a nivel de tabla, o a nivel de columna. Se define o bien como una restricción a nivel de tabla, o a nivel de columna. Define una condición que debe satisfacer cada fila. Define una condición que debe satisfacer cada fila. Expresiones no permitidas: Expresiones no permitidas: – Referencias a las pseudocolumnas CURRVAL, NEXTVAL, LEVEL, o ROWNUM. – Llamadas a las funciones SYSDATE, UID, USER, o USERENV. – Consultas que se refieran a otros valores en otras filas. Se define o bien como una restricción a nivel de tabla, o a nivel de columna. Se define o bien como una restricción a nivel de tabla, o a nivel de columna...., deptnoNUMBER(2), CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99),...

88 1-88 Javier Balbuena / José Manuel Ferrer. Curso / Añadir una Constraint Añade o borra, pero no modifica una constraint. Activa-Desactiva constraints. Añade una constraint NOT NULL con la cláusula MODIFY. Añade o borra, pero no modifica una constraint. Activa-Desactiva constraints. Añade una constraint NOT NULL con la cláusula MODIFY. ALTER TABLE table ADD [CONSTRAINT constraint] type (column); ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

89 1-89 Javier Balbuena / José Manuel Ferrer. Curso / Añadir una Constraint Añada una constraint FOREIGN KEY en la tabla EMP indicando que un manager (director) tiene que existir previamente como número de empleado. SQL> ALTER TABLEemp 2 ADD CONSTRAINTemp_mgr_fk 3 FOREIGN KEY(mgr) REFERENCES emp(empno); Table altered.

90 1-90 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de una Constraint Borra la constraint del manager de la tabla EMP. SQL> ALTER TABLEemp 2 DROP CONSTRAINTemp_mgr_fk; Table altered. SQL> ALTER TABLEemp 2 DROP CONSTRAINTemp_mgr_fk; Table altered. Borra la constraint de PRIMARY KEY de la tabla DEPT y borra la constraint de FOREIGN KEY asociada en la columna EMP.DEPTNO. SQL> ALTER TABLEdept 2 DROP PRIMARY KEY CASCADE; Table altered. SQL> ALTER TABLEdept 2 DROP PRIMARY KEY CASCADE; Table altered.

91 1-91 Javier Balbuena / José Manuel Ferrer. Curso / Desactivar Constraints Ejecute la cláusula DISABLE de la sentencia ALTER TABLE para desactivar una constraint de integridad. Utilice la opción CASCADE para desactivar constrains dependientes. Ejecute la cláusula DISABLE de la sentencia ALTER TABLE para desactivar una constraint de integridad. Utilice la opción CASCADE para desactivar constrains dependientes. SQL> ALTER TABLEemp 2 DISABLE CONSTRAINTemp_empno_pk CASCADE; Table altered. SQL> ALTER TABLEemp 2 DISABLE CONSTRAINTemp_empno_pk CASCADE; Table altered.

92 1-92 Javier Balbuena / José Manuel Ferrer. Curso / Activar Constraints Active una constraint de integridad actualmente desactivada en la definición de la tabla, por medio de la cláusula ENABLE. Un índice UNIQUE o de PRIMARY KEY se crea automáticamente si activa una constraint tipo UNIQUE o PRIMARY KEY Active una constraint de integridad actualmente desactivada en la definición de la tabla, por medio de la cláusula ENABLE. Un índice UNIQUE o de PRIMARY KEY se crea automáticamente si activa una constraint tipo UNIQUE o PRIMARY KEY SQL> ALTER TABLEemp 2 ENABLE CONSTRAINTemp_empno_pk; Table altered. SQL> ALTER TABLEemp 2 ENABLE CONSTRAINTemp_empno_pk; Table altered.

93 1-93 Javier Balbuena / José Manuel Ferrer. Curso / Visualización de Constraints Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones de constraints. CONSTRAINT_NAME C SEARCH_CONDITION SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULL EMP_EMPNO_PK P... CONSTRAINT_NAME C SEARCH_CONDITION SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULL EMP_EMPNO_PK P... SQL> SELECTconstraint_name, constraint_type, 2search_condition 3 FROMuser_constraints 4 WHEREtable_name = 'EMP';

94 1-94 Javier Balbuena / José Manuel Ferrer. Curso / Visualización de las Columnas Asociadas con Constraints CONSTRAINT_NAME COLUMN_NAME EMP_DEPTNO_FK DEPTNO EMP_EMPNO_PK EMPNO EMP_MGR_FK MGR SYS_C00674 EMPNO SYS_C00675 DEPTNO CONSTRAINT_NAME COLUMN_NAME EMP_DEPTNO_FK DEPTNO EMP_EMPNO_PK EMPNO EMP_MGR_FK MGR SYS_C00674 EMPNO SYS_C00675 DEPTNO SQL> SELECTconstraint_name, column_name 2 FROMuser_cons_columns 3 WHEREtable_name = 'EMP'; Visualice las columnas asociadas con los nombres de constraints en la vista: USER_CONS_COLUMNS USER_CONS_COLUMNS

95 1-95 Javier Balbuena / José Manuel Ferrer. Curso / Resumen Cree los siguientes tipos de constraints: – NOT NULL – UNIQUE Key – PRIMARY KEY – FOREIGN KEY – CHECK Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones de constraints. Cree los siguientes tipos de constraints: – NOT NULL – UNIQUE Key – PRIMARY KEY – FOREIGN KEY – CHECK Consulte la tabla USER_CONSTRAINTS para ver todos los nombres y definiciones de constraints.

96 Javier Balbuena / José Manuel Ferrer. Curso / Creación de Vistas

97 1-97 Javier Balbuena / José Manuel Ferrer. Curso / 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

98 1-98 Javier Balbuena / José Manuel Ferrer. Curso / 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.

99 1-99 Javier Balbuena / José Manuel Ferrer. Curso / ¿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

100 1-100 Javier Balbuena / José Manuel Ferrer. Curso / ¿Por qué Usar Vistas? Para restringir el acceso a la B.D. Para ralizar consultas complejas fácilmente Para la indenpendencia de los datos Para presentar diferentes vistas de los mismos datos Para restringir el acceso a la B.D. Para ralizar consultas complejas fácilmente Para la indenpendencia de los datos Para presentar diferentes vistas de los mismos datos

101 1-101 Javier Balbuena / José Manuel Ferrer. Curso / 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

102 1-102 Javier Balbuena / José Manuel Ferrer. Curso / 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]

103 1-103 Javier Balbuena / José Manuel Ferrer. Curso / 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.

104 1-104 Javier Balbuena / José Manuel Ferrer. Curso / 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.

105 1-105 Javier Balbuena / José Manuel Ferrer. Curso / 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;

106 1-106 Javier Balbuena / José Manuel Ferrer. Curso / 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

107 1-107 Javier Balbuena / José Manuel Ferrer. Curso / 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.

108 1-108 Javier Balbuena / José Manuel Ferrer. Curso / 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.

109 1-109 Javier Balbuena / José Manuel Ferrer. Curso / 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.

110 1-110 Javier Balbuena / José Manuel Ferrer. Curso / 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. 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.

111 1-111 Javier Balbuena / José Manuel Ferrer. Curso / 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.

112 1-112 Javier Balbuena / José Manuel Ferrer. Curso / 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, aparecerá el error ORA del Oracle8 Server. Si se intenta realizar una operación DML sobre cualquier fila en la vista, aparecerá el error ORA del Oracle8 Server. 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, aparecerá el error ORA del Oracle8 Server. Si se intenta realizar una operación DML sobre cualquier fila en la vista, aparecerá el error ORA del Oracle8 Server. 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.

113 1-113 Javier Balbuena / José Manuel Ferrer. Curso / 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;

114 1-114 Javier Balbuena / José Manuel Ferrer. Curso / 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.

115 Javier Balbuena / José Manuel Ferrer. Curso / Otros Objetos de la Base de Datos

116 1-116 Javier Balbuena / José Manuel Ferrer. Curso / Objetivos Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir otros objetos de la B.D. y sus posibilidades. Crear, mantener y usar secuencias Crear y mantener índices Crear sinónimos públicos y privados Al completar esta lección, debería ser capaz de hacer lo siguiente: Describir otros objetos de la B.D. y sus posibilidades. Crear, mantener y usar secuencias Crear y mantener índices Crear sinónimos públicos y privados

117 1-117 Javier Balbuena / José Manuel Ferrer. Curso / 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.

118 1-118 Javier Balbuena / José Manuel Ferrer. Curso / ¿Qué Es una Secuencia? Genera números únicos de forma automática. Genera números únicos de forma automática. Es un objeto que se puede compartir. Es un objeto que se puede compartir. Se usa típicamente para crear valores de una clave primaria. Se usa típicamente para crear valores de una clave primaria. Sustituye código de aplicación. Sustituye código de aplicación. Mejora la eficiencia en cuanto a la rapidez de acceso cuando los valores están en el caché de memoria. Mejora la eficiencia en cuanto a la rapidez de acceso cuando los valores están en el caché de memoria. Genera números únicos de forma automática. Genera números únicos de forma automática. Es un objeto que se puede compartir. Es un objeto que se puede compartir. Se usa típicamente para crear valores de una clave primaria. Se usa típicamente para crear valores de una clave primaria. Sustituye código de aplicación. Sustituye código de aplicación. Mejora la eficiencia en cuanto a la rapidez de acceso cuando los valores están en el caché de memoria. Mejora la eficiencia en cuanto a la rapidez de acceso cuando los valores están en el caché de memoria.

119 1-119 Javier Balbuena / José Manuel Ferrer. Curso / La Sentencia CREATE SEQUENCE Defina una secuencia para generar números secuenciales automáticamente. CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

120 1-120 Javier Balbuena / José Manuel Ferrer. Curso / Creación de una Secuencia Crear una secuencia DEPT_DEPTNO para ser utilizada por la PK de la tabla DEPT. No utilizar la opción CYCLE. Crear una secuencia DEPT_DEPTNO para ser utilizada por la PK de la tabla DEPT. No utilizar la opción CYCLE. SQL> CREATE SEQUENCE dept_deptno 2INCREMENT BY 1 3START WITH 91 4MAXVALUE 100 5NOCACHE 6NOCYCLE; Sequence created. SQL> CREATE SEQUENCE dept_deptno 2INCREMENT BY 1 3START WITH 91 4MAXVALUE 100 5NOCACHE 6NOCYCLE; Sequence created.

121 1-121 Javier Balbuena / José Manuel Ferrer. Curso / Verificación de Secuencias Verificar los valores de una secuencia en la tabla USER_SEQUENCES del diccionario de datos. Verificar los valores de una secuencia en la tabla USER_SEQUENCES del diccionario de datos. La columna LAST_NUMBER muestra el próximo número disponible de la secuencia. La columna LAST_NUMBER muestra el próximo número disponible de la secuencia. Verificar los valores de una secuencia en la tabla USER_SEQUENCES del diccionario de datos. Verificar los valores de una secuencia en la tabla USER_SEQUENCES del diccionario de datos. La columna LAST_NUMBER muestra el próximo número disponible de la secuencia. La columna LAST_NUMBER muestra el próximo número disponible de la secuencia. SQL> SELECTsequence_name, min_value, max_value, 2 increment_by, last_number 3 FROMuser_sequences; SQL> SELECTsequence_name, min_value, max_value, 2 increment_by, last_number 3 FROMuser_sequences;

122 1-122 Javier Balbuena / José Manuel Ferrer. Curso / Las pseudocolumnas NEXTVAL y CURRVAL NEXTVAL retorna el próximo valor disponible de la secuencia. NEXTVAL retorna el próximo valor disponible de la secuencia. – Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios. CURRVAL obtiene el actual valor de la secuencia. CURRVAL obtiene el actual valor de la secuencia. – NEXTVAL debe ser emitido para la secuencia, antes que CURRVAL pueda referenciarse. Seguir las reglas para su uso. Seguir las reglas para su uso. NEXTVAL retorna el próximo valor disponible de la secuencia. NEXTVAL retorna el próximo valor disponible de la secuencia. – Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios. CURRVAL obtiene el actual valor de la secuencia. CURRVAL obtiene el actual valor de la secuencia. – NEXTVAL debe ser emitido para la secuencia, antes que CURRVAL pueda referenciarse. Seguir las reglas para su uso. Seguir las reglas para su uso.

123 1-123 Javier Balbuena / José Manuel Ferrer. Curso / Las pseudocolumnas NEXTVAL y CURRVAL NEXTVAL retorna el próximo valor disponible de la secuencia. NEXTVAL retorna el próximo valor disponible de la secuencia. – Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios. CURRVAL obtiene el actual valor de la secuencia. CURRVAL obtiene el actual valor de la secuencia. – NEXTVAL debe ser emitido para la secuencia, antes que CURRVAL pueda referenciarse. Seguir las reglas para su uso. Seguir las reglas para su uso.

124 1-124 Javier Balbuena / José Manuel Ferrer. Curso / Uso de una Secuencia Insert a new department named MARKETING in San Diego. View the current value for the DEPT_DEPTNO sequence. Insert a new department named MARKETING in San Diego. View the current value for the DEPT_DEPTNO sequence. SQL> INSERT INTOdept(deptno, dname, loc) 2 VALUES(dept_deptno.NEXTVAL, 3 'MARKETING', 'SAN DIEGO'); 1 row created. SQL> INSERT INTOdept(deptno, dname, loc) 2 VALUES(dept_deptno.NEXTVAL, 3 'MARKETING', 'SAN DIEGO'); 1 row created. SQL> SELECTdept_deptno.CURRVAL 2 FROMSYS.dual; SQL> SELECTdept_deptno.CURRVAL 2 FROMSYS.dual;

125 1-125 Javier Balbuena / José Manuel Ferrer. Curso / Uso de una Secuencia Mantener los valores de secuencia en memoria permite un acceso más rápido a los mismos. Mantener los valores de secuencia en memoria permite un acceso más rápido a los mismos. Se puede producir una brecha o gap en los valores de una secuencia cuando: Se puede producir una brecha o gap en los valores de una secuencia cuando: – Se produce un rollback. – Se cae el sistema. – Una secuencia es usada en otra tabla. Obtener el próximo número disponible en una secuencia, si fue creada con NOCACHE, consultando la tabla USER_SEQUENCES. Obtener el próximo número disponible en una secuencia, si fue creada con NOCACHE, consultando la tabla USER_SEQUENCES. Mantener los valores de secuencia en memoria permite un acceso más rápido a los mismos. Mantener los valores de secuencia en memoria permite un acceso más rápido a los mismos. Se puede producir una brecha o gap en los valores de una secuencia cuando: Se puede producir una brecha o gap en los valores de una secuencia cuando: – Se produce un rollback. – Se cae el sistema. – Una secuencia es usada en otra tabla. Obtener el próximo número disponible en una secuencia, si fue creada con NOCACHE, consultando la tabla USER_SEQUENCES. Obtener el próximo número disponible en una secuencia, si fue creada con NOCACHE, consultando la tabla USER_SEQUENCES.

126 1-126 Javier Balbuena / José Manuel Ferrer. Curso / Modificación de una Secuencia Cambiar los valores de incremento, valor máximo, valor mínimo y las opciones de caché y ciclo. SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE NOCACHE 5 NOCYCLE; Sequence altered. SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE NOCACHE 5 NOCYCLE; Sequence altered.

127 1-127 Javier Balbuena / José Manuel Ferrer. Curso / Guía para Modificar una Secuencia Se debe ser el propietario de la secuencia, o tener el privilegio ALTER para la misma. Se debe ser el propietario de la secuencia, o tener el privilegio ALTER para la misma. Son afectados solamente los valores futuros de la secuencia. Son afectados solamente los valores futuros de la secuencia. Algunas validaciones son realizadas. Algunas validaciones son realizadas. Si se quiere recomenzar la secuencia con un número diferente, la misma debe ser eliminada y creada nuevamente. Si se quiere recomenzar la secuencia con un número diferente, la misma debe ser eliminada y creada nuevamente. Se debe ser el propietario de la secuencia, o tener el privilegio ALTER para la misma. Se debe ser el propietario de la secuencia, o tener el privilegio ALTER para la misma. Son afectados solamente los valores futuros de la secuencia. Son afectados solamente los valores futuros de la secuencia. Algunas validaciones son realizadas. Algunas validaciones son realizadas. Si se quiere recomenzar la secuencia con un número diferente, la misma debe ser eliminada y creada nuevamente. Si se quiere recomenzar la secuencia con un número diferente, la misma debe ser eliminada y creada nuevamente.

128 1-128 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de una Secuencia Eliminar una secuencia del diccionario de datos usando el comando DROP SEQUENCE. Eliminar una secuencia del diccionario de datos usando el comando DROP SEQUENCE. Una vez eliminada, la secuencia ya no puede ser referenciada. Una vez eliminada, la secuencia ya no puede ser referenciada. Eliminar una secuencia del diccionario de datos usando el comando DROP SEQUENCE. Eliminar una secuencia del diccionario de datos usando el comando DROP SEQUENCE. Una vez eliminada, la secuencia ya no puede ser referenciada. Una vez eliminada, la secuencia ya no puede ser referenciada. SQL> DROP SEQUENCE dept_deptno; Sequence dropped. SQL> DROP SEQUENCE dept_deptno; Sequence dropped.

129 1-129 Javier Balbuena / José Manuel Ferrer. Curso / ¿Qué es un Indice? Un objeto de la base de datos. Un objeto de la base de datos. Usado por el Servidor Oracle8 para acelerar la recuperación de filas mediante el uso de punteros. Usado por el Servidor Oracle8 para acelerar la recuperación de filas mediante el uso de punteros. Reduce la E/S de disco usando un camino de acceso rápido como método para la ubicación de los datos. Reduce la E/S de disco usando un camino de acceso rápido como método para la ubicación de los datos. Independiente de la tabla que indexa. Independiente de la tabla que indexa. Son usados y mantenidos automáticamente por el Servidor Oracle8. Son usados y mantenidos automáticamente por el Servidor Oracle8. Un objeto de la base de datos. Un objeto de la base de datos. Usado por el Servidor Oracle8 para acelerar la recuperación de filas mediante el uso de punteros. Usado por el Servidor Oracle8 para acelerar la recuperación de filas mediante el uso de punteros. Reduce la E/S de disco usando un camino de acceso rápido como método para la ubicación de los datos. Reduce la E/S de disco usando un camino de acceso rápido como método para la ubicación de los datos. Independiente de la tabla que indexa. Independiente de la tabla que indexa. Son usados y mantenidos automáticamente por el Servidor Oracle8. Son usados y mantenidos automáticamente por el Servidor Oracle8.

130 1-130 Javier Balbuena / José Manuel Ferrer. Curso / ¿Cómo se Crean los Indices? Automáticamente. Automáticamente. Un índice único es creado automáticamente cuando se define una restricción PRIMARY KEY o UNIQUE en la definición de una tabla. Manualmente. Manualmente. Los usuarios pueden crear índices no únicos sobre columnas para acelerar el tiempo de acceso a las filas. Automáticamente. Automáticamente. Un índice único es creado automáticamente cuando se define una restricción PRIMARY KEY o UNIQUE en la definición de una tabla. Manualmente. Manualmente. Los usuarios pueden crear índices no únicos sobre columnas para acelerar el tiempo de acceso a las filas.

131 1-131 Javier Balbuena / José Manuel Ferrer. Curso / Creación de un Indice Mejoran la velocidad de acceso a una consulta; por ej. para la columna ENAME (apellido) de la tabla EMP SQL> CREATE INDEX emp_ename_idx 2 ON emp(ename); Index created. SQL> CREATE INDEX emp_ename_idx 2 ON emp(ename); Index created. CREATE INDEX index ON table (column[, column]...); CREATE INDEX index ON table (column[, column]...); Crear índices sobre una o más columnas

132 1-132 Javier Balbuena / José Manuel Ferrer. Curso / Guía para la Creación de un Indice La columna es usada frecuentemente en una cláusula WHERE o en una condición de join. La columna es usada frecuentemente en una cláusula WHERE o en una condición de join. La columna tiene un rango muy amplio de valores. La columna tiene un rango muy amplio de valores. La columna contiene un gran número de valores nulos. La columna contiene un gran número de valores nulos. Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición de join. Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición de join. La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas. La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas. Definir más índices no siempre mejora la rapidez de las consultas. Definir más índices no siempre mejora la rapidez de las consultas. La columna es usada frecuentemente en una cláusula WHERE o en una condición de join. La columna es usada frecuentemente en una cláusula WHERE o en una condición de join. La columna tiene un rango muy amplio de valores. La columna tiene un rango muy amplio de valores. La columna contiene un gran número de valores nulos. La columna contiene un gran número de valores nulos. Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición de join. Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición de join. La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas. La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas. Definir más índices no siempre mejora la rapidez de las consultas. Definir más índices no siempre mejora la rapidez de las consultas.

133 1-133 Javier Balbuena / José Manuel Ferrer. Curso / Guía para la Creación de un Indice No crear un índice si: La tabla es pequeña. La tabla es pequeña. Las columnas no son usadas con frecuencia en condiciones de las consultas. Las columnas no son usadas con frecuencia en condiciones de las consultas. Se espera que la mayoría de las consultas recuperen más que el 2 al 4% de las filas. Se espera que la mayoría de las consultas recuperen más que el 2 al 4% de las filas. La tabla es actualizada frecuentemente. La tabla es actualizada frecuentemente. No crear un índice si: La tabla es pequeña. La tabla es pequeña. Las columnas no son usadas con frecuencia en condiciones de las consultas. Las columnas no son usadas con frecuencia en condiciones de las consultas. Se espera que la mayoría de las consultas recuperen más que el 2 al 4% de las filas. Se espera que la mayoría de las consultas recuperen más que el 2 al 4% de las filas. La tabla es actualizada frecuentemente. La tabla es actualizada frecuentemente.

134 1-134 Javier Balbuena / José Manuel Ferrer. Curso / Verificación de Indices La vista USER_INDEXES del diccionario de datos contiene el nombre de un índice y su condición de unicidad. La vista USER_INDEXES del diccionario de datos contiene el nombre de un índice y su condición de unicidad. La vista USER_IND_COLUMNS contiene el nombre del índice, nombre de la tabla, y nombre de la columna. La vista USER_IND_COLUMNS contiene el nombre del índice, nombre de la tabla, y nombre de la columna. La vista USER_INDEXES del diccionario de datos contiene el nombre de un índice y su condición de unicidad. La vista USER_INDEXES del diccionario de datos contiene el nombre de un índice y su condición de unicidad. La vista USER_IND_COLUMNS contiene el nombre del índice, nombre de la tabla, y nombre de la columna. La vista USER_IND_COLUMNS contiene el nombre del índice, nombre de la tabla, y nombre de la columna. SQL> SELECTic.index_name, ic.column_name, 2ic.column_position col_pos,ix.uniqueness 3 FROMuser_indexes ix, user_ind_columns ic 4 WHEREic.index_name = ix.index_name 5 ANDic.table_name = 'EMP';

135 1-135 Javier Balbuena / José Manuel Ferrer. Curso / Eliminación de un Indice Elimina un índice del diccionario de datos. Elimina el índice EMP_ENAME_IDX del diccionario de datos. Para borrar un índice, tiene que ser propietario del mismo o tener el privilegio DROP ANY INDEX. Elimina un índice del diccionario de datos. Elimina el índice EMP_ENAME_IDX del diccionario de datos. Para borrar un índice, tiene que ser propietario del mismo o tener el privilegio DROP ANY INDEX. SQL> DROP INDEX emp_ename_idx; Index dropped. SQL> DROP INDEX emp_ename_idx; Index dropped. SQL> DROP INDEX index;

136 1-136 Javier Balbuena / José Manuel Ferrer. Curso / Sinónimos Simplificar el acceso a los objetos creando un sinónimo (otro nombre para un objeto). Simplificar el acceso a los objetos creando un sinónimo (otro nombre para un objeto). Hacer referencia a una tabla propia o de otro usuario. Hacer referencia a una tabla propia o de otro usuario. Permite acortar la longitud de los nombres de los objetos. Permite acortar la longitud de los nombres de los objetos. Simplificar el acceso a los objetos creando un sinónimo (otro nombre para un objeto). Simplificar el acceso a los objetos creando un sinónimo (otro nombre para un objeto). Hacer referencia a una tabla propia o de otro usuario. Hacer referencia a una tabla propia o de otro usuario. Permite acortar la longitud de los nombres de los objetos. Permite acortar la longitud de los nombres de los objetos. CREATE [PUBLIC] SYNONYM synonym FOR object; CREATE [PUBLIC] SYNONYM synonym FOR object;

137 1-137 Javier Balbuena / José Manuel Ferrer. Curso / Creación y Eliminación de Sinónimos SQL> CREATE SYNONYMd_sum 2 FORdept_sum_vu; Synonym Created. SQL> CREATE SYNONYMd_sum 2 FORdept_sum_vu; Synonym Created. SQL> DROP SYNONYM d_sum; Synonym dropped. SQL> DROP SYNONYM d_sum; Synonym dropped. Crear un nombre más corto para la vista DEPT_SUM_VU Borrar un sinónimo

138 1-138 Javier Balbuena / José Manuel Ferrer. Curso / Resumen Use secuencias para generar números secuenciales de forma automática. La información sobre secuencias se almacena en la tabla USER_SEQUENCES. Cree índices para mejorar la velocidad en la recuperación de datos, en consultas. La información sobre índices se almacena en la tabla USER_INDEXES. Use sinónimos para ofrecer nombres alternativos para objetos. Use secuencias para generar números secuenciales de forma automática. La información sobre secuencias se almacena en la tabla USER_SEQUENCES. Cree índices para mejorar la velocidad en la recuperación de datos, en consultas. La información sobre índices se almacena en la tabla USER_INDEXES. Use sinónimos para ofrecer nombres alternativos para objetos.


Descargar ppt "Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Subconsultas Multi-Columna."

Presentaciones similares


Anuncios Google