Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad de trabajo 6
Tratamiento de datos
Inserción, borrado y actualización
Hasta ahora nos hemos dedicado a consultar datos de la base de datos mediante la
sentencia SELECT. Hemos trabajado con tablas que ya tenían datos y hemos estado
seleccionando los datos de estas tablas. Ahora aprenderemos a insertar nuevas filas
en una tabla, a actualizar los valores existentes y a borrar filas enteras.
INSERT INTO tabla [(col1, col2, ...)] VALUES (valor1, valor2, ...);
Donde:
(valor1, valor2, ...) representan los valores que se van a dar a las columnas. Los
valores se deben corresponder con cada una de las columnas que aparecen;
además, deben coincidir con el tipo de dato definido para cada columna. Cualquier
columna que no se encuentre en la lista de columnas recibirá el valor NULL,
siempre y cuando no esté definida como NOT NULL, en cuyo caso INSERT fallará, o
cuando tenga una restricción de valor por defecto, en cuyo caso tomará ese valor.
Se pueden utilizar como valores a insertar variables como SYSDATE, USER, etc.
Para los campos numéricos los valores que tengan decimales se especifican con
punto como separador decimal:
albarán: 9
fecha: 25/10/2010
cliente: 3
artículo: 5
unidades: 5
El resultado de su ejecución es que se añade una nueva fila a la tabla con los datos
especificados. Si omitimos algún campo éste adquiere el valor NULL (nulo).
Hasta ahora sólo hemos insertado una fila con cada orden, pero si añadimos a
INSERT una consulta (una orden SELECT), se añaden tantas filas como devuelva la
consulta.
Ejemplos:
A todos los clientes, el día 30/10/2010 les entregamos 3 unidades del artículo con
código 2. Como hay seis clientes generaremos 6 ventas. El número de albarán se
calcula utilizando el contador de filas ROWNUM.
El número de albarán será (9 + rownum), con esta fórmula se obtendrán los
albaranes 10, 11, 12, 13, 14 y 15.
Esta consulta devuelve 6 filas, una por cada cliente, en cada fila sólo varía el valor
del código del cliente y el valor generado para el número de albarán.
Para insertar en la tabla EMPLE30 todos los empleados de la tabla EMPLE que
pertenecen al departamento 30:
Para añadir un Nuevo empleado con el mismo oficio, salario, y departamento que el
empleado de código 123.
Modificaciones: UPDATE
Para actualizar los valores de las columnas en una o varias filas de una tabla, se
utiliza la orden UPDATE.
UPDATE tabla
SET columna1=valor1 [, columna2=valor2] ...
[WHERE condicion];
Donde:
UPDATE centros
SET direccion = 'C/ Pilón 13', num_plazas = 295
WHERE cod_centro = 22;
UPDATE centros
SET num_plazas = 295;
Sustituir todos los pedidos del artículo con código 1 y convertirlos en pedidos de
artículo 2.
UPDATE pedidos
SET articulo = 2
WHERE articulo=1;
UPDATE pedidos
SET articulo = 2;
UPDATE articulos
SET precio = precio*1.05
WHERE descripcion LIKE 'RAM%';
Ejemplos:
Vamos a actualizar la tabla de ventas para que todos los clientes que sean de
Oviedo que hayan adquirido el artículo 2 éste sea suministrado con fecha
29/1/2014.
UPDATE ventas
SET fecha = '29/1/2014'
WHERE articulo = 2 AND
cliente IN (SELECT codigo FROM clientes WHERE localidad = 'Oviedo');
UPDATE usuarios
SET cuota_socio = cuota_socio * 1.10
WHERE num_socio IN (SELECT codigo_usuario FROM activ_usuario
WHERE codigo_actividad = 'GIM');
UPDATE emple
SET apellido = LOWER(apellido),
salario = (SELECT salario * 2 FROM emple WHERE apellido = 'SANCHEZ')
WHERE dept_no = 20;
Un ejemplo con más complejidad: Actualizar las existencias para cada artículo,
añadiendo a las existencias iniciales la suma de unidades pedidas de ese artículo.
UPDATE articulos
SET existencias_iniciales = existencias_iniciales +
(SELECT NVL(SUM(UNIDADES),0) FROM pedidos WHERE articulo=id);
Para eliminar una o varias filas de una tabla, se usa la orden DELETE.
Sin la cláusula WHERE, borrará todas las filas de la tabla. La condición puede incluir
una subconsulta.
Borrar los libros que tienen menos ejemplares que la media de ejemplares de su
estante.
Se define una transacción como una unidad atómica de trabajo que contiene una
o más sentencias DML (INSERT, UPDATE, DELETE).
Para que los cambios producidos durante la transacción se hagan permanentes (no
puedan deshacerse), se dispone de las siguientes opciones:
• Utilizar la sentencia COMMIT, que ordena a la base de datos que haga
permanentes las acciones incluidas en la transacción.
• Ejecutar una sentencia DDL (como CREATE, DROP, RENAME, o ALTER). La
base de datos ejecuta implícitamente una orden COMMIT antes y después de
cada sentencia DDL.
• Si el usuario cierra adecuadamente las aplicaciones de gestión de las bases
de datos Oracle, se produce un volcado permanente de los cambios efectuados
por la transacción.
COMMIT
Cuando se produce un COMMIT se validan todos los cambios pendientes,
haciéndose permanentes.
En SQL Developer tenemos el icono y podemos utilizar la función
que realizan la misma función que la orden COMMIT.
COMMIT;
ROLLBACK
Permite deshacer las actualizaciones realizadas hasta el momento por la
transacción actual.
SAVEPOINT
Permite definir puntos intermedios dentro de una transacción. Al establecer un
SAVEPOINT, se puede ejecutar un ROLLBACK que haga referencia a él, con lo cual
únicamente deshará los cambios posteriores al SAVEPOINT especificado.
SAVEPOINT punto_de_salvaguarda;
CAMPOS AUTONUMÉRICOS
Es muy habitual que los campos que definimos como clave primaria estén sujetos a
una secuencia autonumérica.
Los SGBD disponen de mecanismos para automatizar esta secuencia y usarla en las
inserciones de datos en las tablas. A partir de la versión Oracle 12c se puede definir
una columna identidad (IDENTITY COLUMN) o en cualquier versión se pueden
utilizar una secuencia (SEQUENCE).
SECUENCIAS
Una secuencia es un objeto de base de datos que sirve para generar enteros
únicos. La sintaxis simplificada para crear una secuencia es:
Donde:
INCREMENT BY entero
Especifica el intervalo de crecimiento de la secuencia. Si se omite, su valor es 1. Si
es negativo produce un decremento de la secuencia.
CYCLE | NOCYCLE
Especifica si la secuencia continúa generando valores después de alcanzar su
máximo valor. El valor por defecto es NOCYCLE.
El nombre de la secuencia debe ser único para cada tabla de la que se quiera
automatizar la generación de valores. Por lo tanto, se crearán tantas secuencias
como columnas se quieran automatizar. El campo en el que se insertarán los
valores generados por la secuencia debe ser de tipo numérico.
COLUMNAS DE IDENTIDAD
Cuando se inserta una fila en una columna de este tipo, Oracle genera
automáticamente un valor secuencial y lo inserta en la columna.
ALWAIS
Oracle siempre genera un valor. Si intentamos insertar un valor en la columna de
identidad, se produce un error.
BY DEFAULT
Oracle genera un valor para la columna de identidad si no se proporciona ningún
valor. Si se proporciona un valor, es éste el que se inserta. Si se inserta un valor
NULL genera un error.
BY DEFAULT ON NULL
Oracle genera un valor para la columna de identidad si no se proporciona ningún
valor o se proporciona un valor NULL.
Identity options
Son las mismas que para crear una secuencia: START WITH, INCREMENT BY, etc.
Por defecto se inicial en 1 y crecen de 1 en uno sin valor máximo.
Ejemplos:
SQL Developer incluye un nodo en el que podemos ver las secuencias creadas por
el usuario, o generadas de forma automática al definir una columna de identidad
con la cláusula GENERATED.
Una vista es una tabla virtual que almacena una consulta. Los datos accesibles a
través de la vista no están almacenados en la base de datos, en la base de datos se
guarda la definición de la vista y no el resultado de ella.
Una vista suele llamarse también tabla virtual porque los resultados que retorna y
la manera de referenciarla son los mismos que para una tabla.
Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una
unión de varias tablas; una combinación de varias tablas; un subconjunto de otra
vista, combinación de vistas y tablas.
[(col1 [,col2, ...])] permiten renombrar las columnas que va a contener la vista.
Si no se ponen, se asumen los nombres de columna devueltos por la consulta.
Si alguna de las columnas incluye una expresión, deberemos obligatoriamente
definir alias para esa columna o indicar la lista de columnas.
La vista devuelve los valores actuales que devolvería la consulta declarada después
de AS en la vista aprobados.
Son las mismas que se pueden hacer sobre tablas: SELECT, INSERT, UPDATE y
DELETE aunque hay que tener en cuenta una serie de restricciones:
BORRADO:
- Con filas de una sola tabla.
- Sin utilizar GROUP BY ni DISTINCT.
- Sin usar funciones de grupo o referencias a SYSDATE ni USER.
ACTUALIZACIONES:
Todas las restricciones de borrado y además:
- Ninguna columna a actualizar se habrá definido como una expresión.
INSERCIONES:
Todas las restricciones de borrado y además:
- Todas las columnas obligatorias (NOT NULL) de la tabla asociada deben
estar presentes en la vista.