Sei sulla pagina 1di 7

I.E.S. TRASSIERRA Crdoba.

SQL

7.- SENTENCIAS DE ACTUALIZACIN DE DATOS Y TRANSACCIONALES.7.1.- Actualizacin de datos. 7.1.1.- Insercin de tuplas. Sentencia INSERT. 7.1.2.- Borrado de tuplas. Sentencia DELETE. 7.1.3.- Modificacin de tuplas. Sentencia UPDATE. 7.2.- Sentencias transaccionales. 7.2.1.- Sentencia COMMIT. 7.2.2.- Sentencia ROLLBACK. 7.2.3.- Sentencia SAVEPOINT. 7.3.- Ejercicios propuestos

7.1.- ACTUALIZACIN DE DATOS.Adems de la sentencia SELECT vista, que permite consultar datos, el L.M.D. de SQL dispone de consultas para actualizar los datos de las tablas, permitiendo aadir nuevas tuplas, borrar tuplas existentes y modificar sus datos. Dado que a partir de ahora vamos a actualizar las tablas usadas como ejemplo, y como las sentencias que veremos pueden actualizar (aadir, borrar o modificar) muchas filas de una vez, conviene que para practicar, el alumno o alumna: Trabaje con copias de las tablas originales. Antes de ejecutar la sentencia de actualizacin, se cercione, con ayuda de SELECT, de las tuplas que se vern afectadas

7.1.1.- Insercin de tuplas. Sentencia INSERT.La sentencia INSERT permite aadir uno o mas filas completas a una tabla o vista, para lo cual la tabla debe ser propiedad del usuario que intenta la insercin o tener privilegio de INSERT sobre ella, en cuyo caso deber calificar el nombre de la tabla, anteponindole el nombre del propietario y un punto. Esta sentencia tiene la siguiente sintaxis: VALUES (valor1, valor2, ..) / Subselect

INSERT INTO <tabla> [(col1, col2, ..)] donde:

<tabla> es el nombre de la tabla en la que se desea insertar (realmente aadir al final, pues el orden es irrelevante).
7.- Consultas de actualizacin de datos y transaccionales Pg 1/7

I.E.S. TRASSIERRA Crdoba.

SQL

(col1, col2,..) es una lista de las columnas de esa tabla, no tienen por que especificarse todas ni en el mismo orden de definicin. Si se omite, se interpreta como si se hubieran especificado todas y en dicho orden.

Si se especifica la palabra reservada VALUES solo se insertar un fila completa por cada sentencia. En este caso: (valor1, valor2, ..) representan los valores que adoptarn las columnas. Cada uno de los valores debe ser una constante, o la palabra NULL (o un registro especial), y debe haber tantos como en la lista de columnas. El primer valor se asigna a la primera columna de la lista, el segundo a la segunda, etc. Si alguna columna de la tabla no ha sido especificada se le asigna el valor nulo por defecto, si dicha columna lo admite, sino dar error.

Si se especifica una subconsulta, se insertarn en la tabla todas las tuplas resultantes de la consulta subordinada, por lo que con este formato, con una nica sentencia se pueden insertar mltiples filas, una o ninguna, segn que la subselect devuelva varias, una o ninguna tupla (tabla vaca). Pero hay que tener en cuanta que ni la sentencia subordinada, ni sus subordinadas si las tuviera, pueden referirse a la tabla en la que se est insertando. El nmero de columnas devueltas por la subordinada debe ser el igual que las especificadas en la lista de columnas y sus datos homogneos para que permita asignar los datos devueltos en la primera columna a la primera columna de las especificadas en la lista de columnas, los de la segunda a la segunda, etc. Evidentemente, los datos de las columnas devueltas deben ser homogneos con las receptoras.

Ejemplos: 1).- Dar de alta el departamento de Planificacin con el nmero 123 que depender del 120. Estar ubicado en el centro 10, siendo su presupuesto de 24 y su director el empleado 350. INSERT INTO VALUES tdepto (123, 10, 350, 'F', 24000, 120, 'PLANIFICACION') ;

2).- Supongamos que el usuario USU4 es propietario de la tabla mayores, vaca y con la misma estructura que temple y queremos ( y podemos) insertar en ella los empleados mayores de 50 aos: INSERT INTO SELECT FROM WHERE USU4.mayores nomem, fecna temple TRUC(MONTHS_BETWEEN(sysdate, fecna)/12) >=50 ;

7.- Consultas de actualizacin de datos y transaccionales

Pg 2/7

I.E.S. TRASSIERRA Crdoba.

SQL

7.1.2.- Borrado de tuplas. Sentencia DELETE. La sentencia DELETE permite borrar filas de una tabla o vista. Lgicamente la tabla debe ser propiedad del usuario que intenta realizar el borrado o bien tener privilegio de DELETE sobre ella, en cuyo caso deber calificar el nombre de la tabla, anteponindole el nombre del propietario y un punto. Su sintaxis es: DELETE [FROM] <tabla> [<alias>] [WHERE <predicado>] donde: <tabla> es el nombre de la tabla de la que se van a eliminar las filas. Se le puede asignar un nombre local o alias, indicndolo despus. El <predicado> puede contener sentencias subordinadas, incluso con sentencias correlacionadas a la tabla del DELETE. Esta sentencia borra todas las filas que cumplan el predicado de WHERE, como no pueden borrarse parcialmente desaparecen completas. Si se omite WHERE, se borran todas las filas de la tabla, por lo que hay que tener mucho cuidado con su uso. Ejemplo: Borrar el departamento de Planificacin dado de alta en ltimo lugar: DELETE FROM WHERE

tdepto numde=123 ;

7.1.2.- Modificacin de tuplas. Sentencia UPDATE. La sentencia UPDATE sirve para modificar una o varias tuplas de una tabla, permitiendo que se actualice una, varias o todas las columnas de las fila o filas seleccionadas, al contrario que el borrado y la insercin que trataban filas completas. Para actualizar filas de una tabla, sta debe ser propiedad del usuario que intenta realizar la actualizacin o bien tener privilegio de UPDATE sobre ella, en cuyo caso deber calificar el nombre de la tabla anteponindole el del usuario y un punto. Su sintaxis es: UPDATE <tabla> [<alias>] SET <col1> = <subconsulta> / <exp> / NULL , <col2> = <subconsulta> / <exp> / NULL ....

[WHERE <predicado>] donde: <tabla> es el nombre de la tabla a actualizar, a la que se le puede asignar un nombre local o alias, especificndolo detrs. <subconsulta> especifica que la sentencia SELECT devolver el valor que se asignar a la columna correspondiente.

7.- Consultas de actualizacin de datos y transaccionales

Pg 3/7

I.E.S. TRASSIERRA Crdoba.

SQL

<exp> es la expresin que deber devolver un valor acorde con la columna correspondiente. NULL indica que la columna especificada tomar el valor nulo. El <predicado> puede contener sentencias subordinadas, incluso con sentencias correlacionadas a la tabla del UPDATE. La sentencia UPDATE actualiza todas las filas que cumplan el predicado de WHERE, o todas si se omite esta clusula, modificando las columnas especificadas en la clusula SET. Ejemplos: 1).- Actualizar todos los salarios redondendolos a euros (sin decimales) con un incremento del 3%. (antes debe comprobarse el resultado son una select). UPDATE SET temple salar = ROUND(salar *1.03) ;

Resultado: 35 filas actualizadas.

2).- Honoria Vzquez (empleada n 500) ha ascendido en el mismo departamento y le han aumentado el sueldo hasta igualrselo al menor salario de la tabla mayores, dejando de percibir comisiones. Actualizar la tabla de empleados para que recoja estos cambios. UPDATE SET temple salar = (SELECT FROM comis = NULL numem= 500 ;

MIN(salar) mayores),

WHERE

Resultado: 1 fila actualizada

Ejercicio: Aumentar un 10% los salarios de los empleados con salario inferior al salario medio de su departamento.

7.2.- SENTENCIAS TRANSACCIONALES.


Como sabemos una transaccin o Unidad Lgica de Trabajo (ULT) es una secuencia de operaciones de actualizacin que forman un todo, de forma que o se ejecutan todas o no se ejecuta ninguna, debiendo dejar la base de datos en estado coherente. Una transaccin comienza en la primera sentencia SQL tras: una sentencia COMMIT, una sentencia ROLLBACK o una conexin a la base de datos. Una transaccin termina con: una sentencia COMMIT, una sentencia ROLLBACK o una desconexin, intencionada o no, a la base de datos. El SGBD realiza un COMMIT implcito
7.- Consultas de actualizacin de datos y transaccionales Pg 4/7

I.E.S. TRASSIERRA Crdoba.

SQL

antes de ejecutar cualquier sentencia de LDD (create, alter, ..) o al realizar una desconexin que no haya sido precedida de un error. Las sentencias SQL que permiten gestionar explcitamente las transacciones son: COMMIT ROLLBACK SAVEPOINT

7.2.1.- COMMIT .Seala el final de una transaccin y el principio de otra indicndole al sistema que se deben validar los cambios que se produjeron desde el principio de la transaccin que se da por concluida, hacindolos visibles para los dems usuarios. Su sintaxis es: COMMIT [WORK]; WORK es opcional, y no tiene ninguna trascendencia. Al hacer un COMMIT, se liberan todos los puntos de salvaguarda (SAVEPOINT) indicados hasta el momento.

7.2.2.- ROLLBACK.Seala el final de una transaccin y el principio de otra indicndole al sistema que se deben restaurar el estado de la base de datos tal y como estaba al comenzar la transaccin, es decir, deshace todos los cambios pendientes de validacin de la transaccin actual. Su sintaxis es: ROLLBACK [WORK] [TO [SAVEPOINT] <punto_salvaguarda>]; donde: WORK es opcional y no tiene ninguna trascendencia. TO [SAVEPOINT] <punto_salvaguarda> deshace slo los cambios efectuados desde el punto de salvaguarda indicado. La palabra reservada SAVEPOINT es opcional.

7.2.3.- SAVEPOINT.los puntos de salvaguarda son marcas que va poniendo el usuario durante la transaccin. Estas marcas permiten deshacer los cambios por partes en vez de deshacer toda la transaccin. Su sintaxis es: SAVEPOINT <punto de salvaguarda>; Los nombres de los puntos de salvaguarda pueden reutilizarse durante la transaccin. Al reutilizarlo el anterior punto se pierde. Al ejecutar ROLLBACK sin parmetros o COMMIT, se eliminan todos los puntos de salvaguarda.
7.- Consultas de actualizacin de datos y transaccionales Pg 5/7

I.E.S. TRASSIERRA Crdoba.

SQL

Al ejecutar ROLLBACK TO solo se borran los puntos posteriores al indicado: INSERT INTO ... SAVEPOINT A; DELETE ... ROLLBACK TO SAVEPOINT A; deshace solo el borrado, permaneciendo pendiente la insercin realizada con INSERT .

SQL*Plus dispone de un comando para controlar las validaciones de forma automtica. Su sintaxis es: SET AUTOCOMMIT ON/OFF Si se especifica ON los cambios se validarn automticamente despus de cada operacin de actualizacin de datos. La opcin por defecto es OFF y permite que sea el usuario el que controle la validacin de los cambios con los comandos anteriores. Las sentencias del LMD y la desconexin de Oracle llevan implcita una validacin (commit). Si se produce la cada del sistema o la terminacin anormal de una aplicacin, se llevar a cabo una restauracin automtica, mediante la consulta al fichero diario o log. Oracle almacena temporalmente, en los llamados segmentos de rollback, la informacin necesaria para deshacer los cambios si se ejecuta un ROLLBACK y dejar la informacin en estado consistente. Puede comprobarse que el propietario de la tabla modificada, tiene constancia al instante de las modificaciones que se produzcan. Bastar hacer una consulta y observar el nuevo valor. El navegador es una herramienta del Administrador de la Base de Datos, por lo que al abrir una tabla nos da la visin que de la misma tiene aqul. Si abrimos una tabla con el Navegador, no apreciaremos los cambios hasta que se cierre la sesin del usuario (nos conectemos como otro usuario o salgamos de SQL, por ejemplo), o se ejecute el comando COMMIT.

7.3.- EJERCICIOS PROPUESTOS.------------- Modificacin de datos -------------1.- En aplicacin del convenio colectivo, aumentar todos los salarios en un 3,24 % y las comisiones en un 4,16 %. 2.- Debido a un nuevo sistema telefnico, modificar todas las extensiones telefnicas que comiencen por 8 de forma que se reemplace el 8 por un 9.
7.- Consultas de actualizacin de datos y transaccionales Pg 6/7

I.E.S. TRASSIERRA Crdoba.

SQL

3.- Modificar las seas de los centros de trabajo, eliminando los tres primeros caracteres.
Para los siguientes ejercicios vamos a crear la tabla TEMPLE2 vaca, con la siguiente sentencia que estudiaremos en el siguiente tema. Baste decir que como el departamento 444 no existe, la subselect devuelve una tabla vaca, provocando que temple2 se cree con la misma estructura que temple, pero sin ninguna fila. CREATE TABLE temple2 AS( SELECT * FROM temple WHERE numde=444 ) ;

4.- Insertar en temple2 una fila por cada empleado de temple cuyo salario total (salario ms comisin) supere al salario total medio de su departamento. 5.- En temple2, modificar el salario de los empleados con comisin aumentndolo en sta, poniendo nula su comisin. 6.- En temple2, disminuir el salario en un 3% de los empleados cuyos salarios (en temple) superen en un 50% al salario mximo de su departamento. 7.- Borrar en temple2 a los empleados cuyo salario (sin incluir comisin) supere al salario medio de los empleados de su departamento. 8.- Borrar en temple2 a los empleados cuyo salario (sin incluir comisin) supere al salario medio de los empleados de su departamento, excluyndole a l mismo. 9.- Disminuir la fecha de ingreso de los directores de departamento en tantos meses como aos de antigedad cumplidos lleven en la empresa. 10.- Borrar todas las filas de temple2.

La tabla temple2 debe encontrarse vaca. Con el navegador crear la tabla TBORRA con una nica columna: numem, y sin ningn registro.

11.- Insertar en TBORRA los datos de los empleados que se jubilarn este ao, que son los que cumplan durante el presente ao 55 o ms aos de edad. 12.- Borrar de TEMPLE las filas de los empleados incluidos en TBORRA y almacenarlos en TEMPLE2. 13.- Modificar los salarios de los directores en propiedad de forma que ganen el doble del empleado mejor pagado de su departamento, excluido l mismo. --------- Transacciones ------------14.- Crear un archivo de comandos que al ejecutarlo permita insertar un nuevo centro de trabajo. La introduccin de datos se har con variables de sustitucin, validando en la medida de lo posible los datos de entrada (maysculas en campos carcter).

7.- Consultas de actualizacin de datos y transaccionales

Pg 7/7

Potrebbero piacerti anche