9 Manipulación de Datos Copyright Oracle Corporation, 1998. All rights reserved.
Objetivos Al completar esta lección, debería a ser capaz de hacer lo siguiente: Describir cada sentencia DML Insertar filas nuevas en una tabla. Modificar filas de una tabla. Eliminar filas de una tabla. Explicar el control de transacciones y su importancia. 9-2 Copyright Oracle Corporation, 1998. All rights reserved.
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. 9-3 Copyright Oracle Corporation, 1998. All rights reserved.
Añadir un Nuevo Registro a una Tabla 50 DEVELOPMENT DETROIT Nuevo Registro DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON insertar un nuevo registro en la tabla DEPT... DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 DEVELOPMENT DETROIT 9-4 Copyright Oracle Corporation, 1998. All rights reserved.
La Sentencia INSERT Añadimos nuevos registros a una tabla, por medio de la sentencia INSERT. INSERT INTO VALUES table [(column [, [, column...])] (value [, [, value...]); Mediante esta sintaxis, sólo se inserta un registro al mismo tiempo. 9-5 Copyright Oracle Corporation, 1998. All rights reserved.
Inserción de Nuevos Registros Insertar una nueva fila conteniendo los valores para cada columna. Opcionalmente, se pueden listar las columnas en la cláusula INSERT. SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (50, 'DEVELOPMENT', 'DETROIT'); 1 row created. Colocar los valores en el orden que las columnas tienen en la tabla por defecto. Encerrar los valores de datos de tipo carácter cter y fecha entre comillas simples. 9-6 Copyright Oracle Corporation, 1998. All rights reserved.
Inserción de Registros con Valores Nulos Método Implícito: Omitir la columna en la lista. SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS'); 1 row created. Método Explícito: Especificar la palabra clave NULL o el string vacío o ('') en la lista de VALUES. SQL> INSERT INTO dept 2 VALUES (70, 'FINANCE', NULL); 1 row created. 9-7 Copyright Oracle Corporation, 1998. All rights reserved.
Inserción de Valores Especiales La función n SYSDATE registra la fecha y hora actual. SQL> INSERT INTO emp (empno, ename, job, 2 mgr, hiredate, sal, comm, 3 deptno) 4 VALUES (7196, 'GREEN', 'SALESMAN', 5 7782, SYSDATE, 2000, NULL, 6 10); 1 row created. 9-8 Copyright Oracle Corporation, 1998. All rights reserved.
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'), 4 1300, NULL, 10); 1 row created. Verificamos la inserción: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ----- ----- 2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10 9-9 Copyright Oracle Corporation, 1998. All rights reserved.
Inserción de Valores por medio de Variables de Sustitución Creamos un script interactivo usando parámetros de sustitución n de SQL*Plus: SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location'); Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created. 9-10 Copyright Oracle Corporation, 1998. All rights reserved.
Creación de un Script con PROMPTS Específicos ACCEPT almacena el valor en una var. PROMPT visualiza el texto especificado. ACCEPT department_id PROMPT 'Please enter the - department number:' ACCEPT department_name PROMPT 'Please enter - the department name:' ACCEPT location PROMPT 'Please enter the - location:' INSERT INTO dept (deptno, dname, loc) VALUES (&department_id, '&department_name', &location); 9-11 Copyright Oracle Corporation, 1998. All rights reserved.
Copiando Registros de Otra Tabla Escribir el comando INSERT con una subconsulta (subquery( subquery). SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER'; 3 rows created. No usar la cláusula VALUES. Observar que coincida el número n de columnas en la cláusula INSERT con las de la subconsulta. 9-12 Copyright Oracle Corporation, 1998. All rights reserved.
Modificación de Datos en una Tabla EMP EMPNO ENAME JOB... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20... Modificaci Modificación n de un registro en la Tabla EMP EMP EMPNO ENAME JOB... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 20 10 7566 JONES MANAGER 20... 9-13 Copyright Oracle Corporation, 1998. All rights reserved.
La Sentencia UPDATE Modificamos registros existentes con la sentencia UPDATE UPDATE table SET column = value [, [, column = value] [WHERE condition]; Puede afectar a más de un registro al mismo tiempo. 9-14 Copyright Oracle Corporation, 1998. All rights reserved.
Modificación de Registros en una Tabla Los registros a modificar se especifican por medio de la cláusula WHERE SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated. Si se omite la cláusula WHERE se modificarían todos los registros de la tabla. SQL> UPDATE employee 2 SET deptno = 20; 14 14 rows updated. 9-15 Copyright Oracle Corporation, 1998. All rights reserved.
Proceso de Modificación con Subconsultas Multi-Columna Modificar el oficio y departamento del empleado 7698, con los valores correspondientes actualmente al empleado 7499: 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. 9-16 Copyright Oracle Corporation, 1998. All rights reserved.
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> UPDATE employee 2 SET deptno = (SELECT deptno 3 FROM emp 4 WHERE empno = 7788) 5 WHERE job = (SELECT job 6 FROM emp 7 WHERE empno = 7788); 2 rows updated. 9-17 Copyright Oracle Corporation, 1998. All rights reserved.
Modificación de Registros: Error de Integridad (Constraints) SQL> UPDATE emp 2 SET deptno = 55 55 3 WHERE deptno = 10; UPDATE emp * ERROR at at line 1: 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found El El Departamento Departamento número 55 55 no no existe existe 9-18 Copyright Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros de una Tabla DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 DEVELOPMENT DETROIT 60 MIS... Borramos un registro de la tabla DEPT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 60 MIS... 9-19 Copyright Oracle Corporation, 1998. All rights reserved.
La Sentencia DELETE Puede eliminar registros existentes de una tabla, por medio de la sentencia DELETE. DELETE [FROM] table [WHERE condition]; 9-20 Copyright Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros de una Tabla Los registros a eliminar se especifican por medio de la cláusula WHERE SQL> DELETE FROM department 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted. Si omite la cláusula WHERE se borrarán todos los registros de la tabla SQL> DELETE FROM department; 4 rows deleted. 9-21 Copyright Oracle Corporation, 1998. All rights reserved.
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 FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES'); 6 rows deleted. 9-22 Copyright Oracle Corporation, 1998. All rights reserved.
Eliminación de Registros: Error de Integridad (Constraints) SQL> DELETE FROM dept 2 WHERE deptno = 10; DELETE FROM dept * ERROR at at line 1: 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found No No No puede puede puede eliminar eliminar eliminar un un un registro registro registro que que que contiene contiene contiene una una una clave clave clave primaria, primaria, primaria, usada usada usada como como como clave clave clave externa externa externa en en en otra otra otra tabla tabla tabla 9-23 Copyright Oracle Corporation, 1998. All rights reserved.
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 9-24 Copyright Oracle Corporation, 1998. All rights reserved.
Transacciones en la Base de Datos Comienzan cuando se ejecuta el primer comando SQL. 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. 9-25 Copyright Oracle Corporation, 1998. All rights reserved.
Ventajas de COMMIT y ROLLBACK Aseguran la consistencia de los datos. Pueden visualizar los cambios sobre los datos antes de hacerlos permanentes. Agrupan lógicamente l tareas relacionadas entre sí. s 9-26 Copyright Oracle Corporation, 1998. All rights reserved.
Control de Transacciones Transacción INSERT UPDATE INSERT DELETE COMMIT Savepoint A Savepoint B ROLLBACK to Savepoint B ROLLBACK to Savepoint A ROLLBACK 9-27 Copyright Oracle Corporation, 1998. All rights reserved.
Proceso Implícito de Transacciones Un commit automático 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 tico ocurre bajo una terminación n anormal de SQL*Plus o una falla del sistema. 9-28 Copyright Oracle Corporation, 1998. All rights reserved.
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 b de la base de datos. 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. Las filas afectadas son bloqueadas (locked)( locked); otros usuarios no pueden cambiar los datos pertenecientes a esas filas. 9-29 Copyright Oracle Corporation, 1998. All rights reserved.
Estado de los Datos Después del COMMIT Los cambios en los datos son escritos en la base de datos. Los datos anteriores se pierden definitivamente. Todos los usuarios pueden ver los resultados. Se liberan los bloqueos aplicados a las filas afectadas; esas filas están n ahora disponibles para que otros usuarios las usen. Se borran todos los savepoints. 9-30 Copyright Oracle Corporation, 1998. All rights reserved.
Commit de Datos Realizar los cambios: SQL> UPDATE emp 2 SET deptno = 10 10 3 WHERE empno = 7782; 1 row updated. Hacer Commit de los cambios: SQL> COMMIT; Commit complete. 9-31 Copyright Oracle Corporation, 1998. All rights reserved.
Estado de los Datos Después de Hacer ROLLBACK Se descartan todos los cambios pendientes. Los cambios en los datos se deshacen. Se restaura el estado previo de los datos. Se levantan todos los bloqueos sobre las filas afectadas. SQL> DELETE FROM 14 rows deleted. SQL> ROLLBACK; Rollback complete. employee; 9-32 Copyright Oracle Corporation, 1998. All rights reserved.
Hacer ROLLBACK Hasta un Punto de Salvaguarda (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. SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete. 9-33 Copyright Oracle Corporation, 1998. All rights reserved.
Rollback a Nivel de Sentencia 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. Todos los otros cambios se mantienen. El usuario debería a terminar explícitamente las transacciones usando una sentencia COMMIT o ROLLBACK. 9-34 Copyright Oracle Corporation, 1998. All rights reserved.
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. 9-35 Copyright Oracle Corporation, 1998. All rights reserved.
Implementación de la Consistencia en Lectura Usuario A update emp set sal = 2000 where ename = 'SCOTT' Bloques de Datos Segmentos de Rollbck Usuario B select * from emp Imagen Consistente en Lectura Datos cambiados y no cambiados Antes de cambiar los datos antiguos 9-36 Copyright Oracle Corporation, 1998. All rights reserved.
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) 9-37 Copyright Oracle Corporation, 1998. All rights reserved.
Resumen Comando INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK Descripción Agrega una fila nueva a la tabla. Modifica filas de una tabla. Elimina filas de una tabla. Hace permanentes todos los cambios pendientes. Permite hacer un rollback hasta la marca de savepoint. Descarta todos los cambios pendientes de los datos. 9-38 Copyright Oracle Corporation, 1998. All rights reserved.
Visión General de la Práctica Insertar filas en tablas. Actualizar y eliminar filas en tablas. Controlar transacciones. 9-39 Copyright Oracle Corporation, 1998. All rights reserved.