Cerrar

Enviar mensaje

twitter FaceBook You Tube Git Hub Docs.com Enviar email

Manual de SQL (Oracle SQL)

[3]
Instrucciones DML

Publicidad

[3.1] ¿qué es DML?

El DML (Lenguaje de Modificación de Datos) es una de las partes fundamentales del lenguaje SQL. Lo forman las instrucciones capaces de modificar (añadir, cambiar o eliminar) los datos de las tablas.

Al conjunto de instrucciones DML que se ejecutan consecutivamente, se le llama transacción. Lo interesante de las transacciones es que podemos anularlas, ya que forman una unidad lógica de trabajo que hasta que no se acepten, sus resultados no serán definitivos.

En todas las instrucciones DML, el único dato devuelto por el sistema es el número de filas que se han modificado al ejecutar la instrucción.

[3.2] inserción de datos

Añadir datos a una tabla se realiza mediante la instrucción INSERT. Su sintaxis fundamental es:

INSERT INTO tabla [(listaDeColumnas)] 
VALUES (valor1 [,valor2 ...])

La tabla representa la tabla a la que queremos añadir el registro y los valores que siguen a la cláusula VALUES, son los valores que damos a los distintos campos del registro. Si no se especifica la lista de campos, la lista de valores debe seguir el orden de las columnas según fueron creados (para conocer ese orden basta invocar al comando DESCRIBE).

La lista de campos a rellenar se indica si no queremos rellenar todas las columnas.

Las columnas no rellenadas explícitamente con la orden INSERT, se rellenan con su valor por defecto (DEFAULT) o bien con NULL si no se indicó valor por defecto alguno. Si alguna columna tiene restricción de obligatoriedad (NOT NULL), ocurrirá un error si no indicamos un valor para dicha columna.

Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni, nombre, apellido1, apellido2, localidad y dirección

supongamos que ese es el orden de creación de los campos de esa tabla y que la localidad tiene como valor por defecto Palencia y la dirección no tiene valor por defecto. En ese caso estas dos instrucciones son equivalentes:

INSERT INTO clientes VALUES( ‘11111111’,’Pedro’,’Gutiérrez’, ‘Crespo’,DEFAULT,NULL);
INSERT INTO clientes(dni,nombre,apellido1,apellido2)
VALUES(‘11111111’,’Pedro’,’Gutiérrez’, ‘Crespo’);

Son equivalentes puesto que, en la segunda instrucción, los campos no indicados se rellenan con su valor por defecto y la dirección no tiene valor por defecto.

Los valores por defecto se indican, durante la creación o modificación de la estructura de una tabla, a través de la palabra clave DEFAULT.

[3.3] modificación de datos

La modificación de los datos de las filas se realiza mediante la instrucción UPDATE.

Su sintaxis es la siguiente:

UPDATE tabla
SET columna1=valor1 [,columna2=valor2...]
[WHERE condición];

Se modifican las columnas indicadas en el apartado SET con los valores indicados. La cláusula WHERE permite especificar qué registros serán modificados.

Ejemplos:

UPDATE clientes SET provincia=’Ourense’
WHERE provincia=’Orense’;
UPDATE productos SET precio=precio*1.16;

La primera instrucción actualiza la provincia de los clientes de Orense para que aparezca como Ourense.

El segundo UPDATE incrementa los precios en un 16%. La expresión para el valor puede ser todo lo compleja que se desee (en el ejemplo se utilizan funciones de fecha para conseguir que los partidos que se jugaban hoy, pasen a jugarse el siguiente martes):

UPDATE partidos SET fecha= NEXT_DAY(SYSDATE,’Martes’)
WHERE fecha=SYSDATE;

En la condición se pueden utilizar cualquiera de los siguientes operadores de comparación:

Operador

Significado

>

Mayor que

<

Menor que

>=

Mayor o igual que

<=

Menor o igual que

=

Igual

<>

Distinto

!=

Distinto

Además se puede utilizar:

Operador

Significado

AND

Devuelve verdadero si las expresiones a su izquierda y derecha son ambas verdaderas

OR

Devuelve verdadero si cualquiera de las dos expresiones a izquierda y derecha del OR, son verdaderas

NOT

Invierte la lógica de la expresión que está a su derecha. Si era verdadera, mediante NOT pasa a ser falso.

En definitiva, en la cláusula WHERE se acepta cualquier expresión que devuelva verdadero o falso.

[3.4] borrado de datos

Se realiza mediante la instrucción DELETE:

DELETE [FROM] tabla [WHERE condición];

Esta instrucción, elimina las filas de la tabla que cumplan la condición indicada. Ejemplo:

DELETE FROM empleados WHERE seccion=23;

La cláusula WHERE igual que en el caso de la instrucción UPDATE.

Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de integridad y que la opción de integridad ON DELETE CASCADE hace que no sólo se borren las filas indicadas, sino todas los relacionadas.

[3.5] transacciones

[3.5.1]introducción

Como se ha comentado anteriormente, una transacción está formada por una serie de instrucciones DML. Una transacción comienza con la primera instrucción DML que se ejecute y finaliza al darse alguna de estas situaciones:

Las transacciones se utilizan para asegurar que las instrucciones de modificación de datos realizan lo que deseamos. En todo momento se asegura que los datos será consistentes y además podremos probar los resultados de algunas instrucciones sin peligro antes de realizar su versión definitiva.

[3.5.2]instrucción COMMIT

La instrucción COMMIT hace que los cambios realizados por la transacción sean definitivos, irrevocables. Sólo se debe utilizar si estamos de acuerdo con los cambios, conviene asegurarse mucho antes de realizar el COMMIT ya que las instrucciones ejecutadas pueden afectar a miles de registros.

Hay que recordar que si hemos realizado un INSERT, un DELETE y dos UPDATE (por ejemplo), COMMIT acepta de golpe todas esas instrucciones, ya que la transacción será el conjunto de todas ellas (si entre medias no hemos escrito una instrucción DDL o DCL).

[3.5.3]ROLLBACK

Anula todas las instrucciones de la transacción. Es una instrucción peligrosa que sólo deberíamos utilizar si nos hemos dado cuenta que la ejecución de las instrucciones de la transacción da lugar a un efecto no deseado en los datos.

Un abandono de sesión incorrecto o un problema de comunicación o de caída del sistema dan lugar a un ROLLBACK implícito.

[3.5.4]SAVEPOINT, puntos de guardado

No es una acción estándar pero sí está admitida por Oracle. Puesto que ROLLBACK anula toda la transacción, los puntos de guardado son una utilidad que nos permite anular parte de la transacción.

El funcionamiento es el siguiente:

Los puntos de guardado sólo funcionan durante la transacción en curso. Al finalizar la transacción, estos se borran.

Los nombres que damos a cada punto de guardado deben ser diferentes, de otra forma si usamos el mismo nombre dos veces, el último uso de ese nombre anula el anterior.

Como es lógico, si hemos retrocedido a un punto de guardado lejano, después no podremos ir a un punto de guardado más reciente.

[3.5.5]estado de los datos durante la transacción

El manejo de las transacciones es una de las cuestiones más complejas para un Sistema Gestor de Bases de Datos y por ello algunos no tienen cap

ad de gestionarlas, otros las gestionan de forma muy avanzada.

Los SGBD más poderosos son capaces de gestionar transacciones en cumpliendo la norma

que asegura estos cuatro aspectos (de los que salen la siglas de

):

Oracle cumple estrictamente la norma

. De modo que la forma de actuar respecto a el estado de los datos durante las transacciones es el siguiente: