Você está na página 1de 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

TEMA 10 MANIPULACIN DE DATOS. INSERT, UPDATE, DELETE


1. 2. 3. 4. Insert. Update. Delete. Rollback, Commit, Autocommit.

Prcticas de Diseo y Gestin de Bases de Datos

Page 1 of 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

Hasta ahora hemos realizado consultas a bases de datos usando la clasula SELECT. Hemos trabajado con tablas que ya tenan datos y hemos seleccionado datos de esas tablas. Ahora aprenderemos a insertar datos en las tablas, borrar y modificar los datos.

1. INSERT. Con la clusula INSERT se pueden aadir filas de datos a las tablas. Sintxis: INSERT INTO nombre_tabla [ (columna1 [,columna2]...)] VALUES (valor1, [,valor2]...); columna1, columna2 representa la columna o columnas donde se van a introducir los valores. Si no se especifican columnas se asumen todas las columnas de la tabla por defecto. valor1, valor2.. son los valores que se asignan a columna1, columna2...Estos valores deben ser del tipo de datos definidos de las columnas. Cualquier columna que no se encuentre en la lista recibir el valor NULL, siempre y cuando no est definida como NOT NULL, en cuyo caso INSERT fallar. Veamos algunos ejemplos: Consideremos la tabla CLIENTES cuya descripcin y contenido es el siguiente:
SQL> DESC CLIENTES; Name -----------------------------------CLT_NUM CLT_APELL CLT_NOM CLT_PAIS CLT_POB Null? Type ---------------- ----------------NOT NULL NUMBER(38) CHAR(10) CHAR(10) CHAR(1) CHAR(10)

SQL> SELECT * FROM CLIENTES; CLT_NUM CLT_APELL CLT_NOM C CLT_POB ---------------- -------------------------- ---------------------- - --------------1 BORRAS Margarita E MADRID 2 PEREZ Miguel E MADRID 3 DUPONT Jean F PARIS 4 DUPRET Michel F LYON 5 LLOPIS Antoni E BARCELONA 6 SOURIS Marcel F PARIS 7 GOI Pablo E PAMPLONA 8 COURBON Gerard F LYON 9 ROMAN Consuelo E JAEN 10 ROCA Pau E GERONA 11 MANCHA Jorge E VALENCIA 12 CURRO Pablo E BARCELONA 13 CORTES Diego E MADRID 14 FERNANDEZ Joaquin E MADRID

Prcticas de Diseo y Gestin de Bases de Datos

Page 2 of 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.


Jacinto Pedro E PAMPLONA E PAMPLONA

15 DURAN 16 MINGUIN 16 rows selected.

Demos de alta a algn cliente. Por ejemplo al siguiente: 17, CESAR, Jose, E, SEVILLA
Fichero insertar.sql. SQL> INSERT INTO CLIENTES VALUES (17, 'CESAR', 'Jose', 'E', 'SEVILLA');

Si observamos ahora la tabla clientes tiene una fila ms. Al ejecutar la sentencia, Oracle emite un mensaje de (1 fila creada), indicando que la fila se ha insertado correctamente.

Supongamos que hay columnas en las que no damos valores. Por ejemplo ejecutemos la siguiente sentencia:
Fichero insertar2.sql SQL >INSERT INTO CLIENTES (CLT_NUM, CLT_APELL, CLT_NOM, CLT_POB) VALUES (18, 'GATICA', 'Jose', 'CADIZ');

Como vemos hemos omitido la columna C. Por lo tanto en esta fila para la fila nacionalidad aparecer el valor NULL.
SQL> SELECT * FROM CLIENTES WHERE CLT_NUM=18; CLT_NUM CLT_APELL CLT_NOM C CLT_POB ---------------- ----------------- ----------------- - -------------18 GATICA Jose CADIZ

Supongamos ahora que queremos introducir una nueva fila, pero no deseamos introducir el campo CLT_NUM.
Fichero insertar3.sql INSERT INTO CLIENTES (CLT_APELL, CLT_NOM,CLT_PAIS, CLT_POB) VALUES ('GATICA', 'Jose','E', 'CADIZ'); ERROR at line 1: ORA-01400: cannot insert NULL into ("FORM"."CLIENTES"."CLT_NUM")

Aparecer este mensaje porque en la definicin de la tabla clientes no permitimos valores nulos en la columna CLT_NUM. Otro problema con el que nos podemos encontrar es que el tipo de datos de un valor sea correcto, pero la longitud de ese valor sobrepase el rango de su definicin en la columna.

Prcticas de Diseo y Gestin de Bases de Datos

Page 3 of 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

Por ejemplo:
SQL > INSERT INTO CLIENTES (CLT_NUM, CLT_APELL, CLT_NOM, CLT_PAIS, CLT_POB) VALUES (19, 'GATICA', 'Jose', 'ES','CADIZ'); ERROR at line 2: ORA-01401: inserted value too large for column

1.1. INSERCIN CON SELECT. Lo que hemos realizado anteriormente es inserter una fila, pero tambin podemos inseretar una serie de filas, a travs de una SELECT. Sintxis: INSERT INTO nombretabla1 [(columna1 [,columna2]....)] SELECT {columna1 [,columna2].....| *} FROM nombretabla2 [CLUSULAS DE SELECT];

Vamos a crear una tabla auxiliar que tenga la misma estructura de datos que la tabla clientes:
Fichero auxiliar.sql SQL> CREATE TABLE auxiliar ( clt_num INTEGER NOT NULL PRIMARY KEY, clt_apell CHAR(10), clt_nom CHAR(10), clt_pais CHAR(1), clt_pob CHAR(10) );

Ahora vamos a introducir en la tabla auxiliary todos aquellos clients que sean espaoles.
Fichero espanoles.sql. SQL> INSERT INTO AUXILIAR (SELECT * FROM CLIENTES WHERE CLT_PAIS='E'); SQL> SELECT * FROM AUXILIAR;

CLT_NUM CLT_APELL CLT_NOM C CLT_POB ---------------- ----------------- ---------------- --- ------------1 BORRAS Margarita E MADRID 2 PEREZ Miguel E MADRID 5 LLOPIS Antoni E BARCELONA 7 GOI Pablo E PAMPLONA 9 ROMAN Consuelo E JAEN 10 ROCA Pau E GERONA 11 MANCHA Jorge E VALENCIA 12 CURRO Pablo E BARCELONA 13 CORTES Diego E MADRID 14 FERNANDEZ Joaquin E MADRID 15 DURAN Jacinto E PAMPLONA 16 MINGUIN Pedro E PAMPLONA 17 CESAR Jose E SEVILLA 13 rows selected.

Prcticas de Diseo y Gestin de Bases de Datos

Page 4 of 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

2. UPDATE. Para actualizar los valores de las columnas para una o varias filas de una tabla utilizaremos la orden UPDATE, cuya sintxis es la siguiente: Sintxis: UPDATE nombretabla SET columna1=valor1, ......, columnan=valorn WHERE condicin; Nombretabla: Tabla que deseamos modificar. SET: Indica las columnas que se van a actualizar y sus valores. WHERE: Condiciones de actualizacin. Ejemplos. Modifiquemos la tabla Auxiliar, y pongamos como nacionalidad de CESAR F.
Fichero actualiza1.sql. SQL> UPDATE auxiliar SET CLT_PAIS='F' WHERE CLT_APELL='CESAR';

A continuacin visualizamos aquellos clientes que tengan como apellido CESAR.

SQL> SELECT * FROM AUXILIAR WHERE CLT_APELL='CESAR'; CLT_NUM CLT_APELL CLT_NOM C CLT_POB ----------------- ---------------- ----------------- - --------------17 CESAR Jose F SEVILLA

Que ocurrira si no pusiesemos WHERE?


Fichero actualiza2.sql SQL> UPDATE auxiliar SET CLT_PAIS='F';

Lo que ocurrira es que actualizara todas las filas. Por tanto tenemos que tener cuidado si no ponemos la condicin WHERE. Si ahora hacemos una SELECT de la tabla auxiliar, veremos que en todas las filas aparecer F en el campo CLT_PAIS.

2.1. UPDATE CON SELECT. Podemos incluir una subconsulta en una sentencia UPDATE. La SELECT podr estar: o En la clusula WHERE. o En SET.
Page 5 of 7

Prcticas de Diseo y Gestin de Bases de Datos

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

Sintxis: UPDATE nombretabla SET columna1=valor1, ..... , columnan=valorn WHERE columnam = (SELECT....); UPDATE nombretabla SET (columna1, columna2,....)=(SELECT col1, col2...) WHERE condicin.

3. DELETE. Para eliminar una o varias filas de una tabla se usa la orden DELETE. La clusula WHERE es muy importante para eliminar slo aquellas filas que deseemos. Si no ponemos la clusula WHERE entonces eliminaremos todas las filas de la tabla. El espacio usado por filas que han sido borradas no se reutiliza, a menos que se use EXPORT o IMPORT. La condicin puede incluir una subconsulta. Sintxis: DELETE [FROM] nombretabla WHERE condicin;

Ejemplos. Borremos las dos filas que insertamos anteriormente en la tabla clientes.
SQL> DELETE CLIENTES WHERE CLT_NOM='Jose';

Borremos ahora todas las filas de la tabla auxiliar.


SQL> DELETE FROM AUXILIAR;

Lo que hemos hecho en esta segunda sentencia es eliminar todas las filas de la tabla axuliar, pero no hemos borrado fsicamente la tabla. Para borrar la tabla tendremos que hacer un DROP. Para borrar filas de una tabla usando una subconsulta es recomendable usar IN

DELETE FROM.tabla1 WHERE columna IN (SELECT columna from tabla2 WHERE condicin); 4. ROLLBACK, COMMIT, AUTOCOMMIT. Supongamos que deseamos borrar determinadas filas de una tabla y se nos olvida poner la condicin WHERE. Al ejecutar la sentencia borraremo s todas las filas de la tabla. Oracle permite dar marcha atrs a travs de la orden ROLLBACK, siempre y cuando no hayamos validado la sentencia con la orden COMMIT.

Prcticas de Diseo y Gestin de Bases de Datos

Page 6 of 7

Formacin 2002.

Tema 10. Manipulacin de Datos. Insert, Update, Delete.

Cuando realizamos cambios en tablas, es decir, cuando realizamos INSERT, UPDATE, DELETE, los cambios no se aplicarn a la base de datos hasta que no hagamos un COMMIT. SQLPLUS permite validar automticamente sin necesidad de ejecutar COMMIT cada vez que ejecutemos una sentencia INSERT, UPDATE, DELETE. El valor de este parmetro se puede mostrar con la orden SHOW.
SQL> SHOW AUTOCOMMIT; autocommit OFF

Para poner este parmetro por defecto a ON


SQL> SET AUTOCOMMIT ON; SQL> SHOW AUTOCOMMIT; autocommit IMMEDIATE

COMMIT IMPLCITO: Hay varias rdenes SQL que fuerzan a que se ejecute un COMMIT sin necesidad de indicarlo:
QUIT EXIT CONNECT DISCONNECT CREATE TABLE CREATE VIEW GRANT REVOQUE DROP TABLE DROP VIEW ALTER AUDIT NOAUDIT

ROLLBACK AUNTOMTICO: Si despus de haber realizado cambios en nuestras tables, se produce un fallo del sistema, como por ejemplo, se va la luz, y no hemos validado el trabajo, ORACLE hace un ROLLBACK automtico. Esto significa que tendremos que repetir el trabajo cuando pongamos en marcha la base de datos.

Prcticas de Diseo y Gestin de Bases de Datos

Page 7 of 7

Você também pode gostar