Está en la página 1de 22

Parcial II: 1.

1 DML

Leccin 8

Manipulacin de datos
Objetivos En este captulo se revisar lo siguiente: Describir cada sentencia DML Insertar filas a una tabla Actualizar filas de una tabla Borrar filas de una tabla Data Manipulation Language (DML) Lenguaje de Manipulacin de Datos El lenguaje de manipulacin de datos (DML) es una parte fundamental de SQL. Cuando se quiere agregar, actualizar o eliminar datos de una base de datos, se ejecutan sentencias DML. Una coleccin de sentencias DML que forman una unidad lgica de trabajo es llamada transaccin. Considere una base de datos de un banco. Cuando un cliente del banco transfiere dinero de su cuenta de ahorros a su cuenta de cheques, la transaccin puede consistir de tres operaciones separadas: 1. Decrementar la cuenta de ahorros. 2. Incrementar la cuenta de cheques. 3. Registrar la transaccin en la bitcora de transacciones. El servidor de Oracle puede garantizar que las tres sentencias SQL sean ejecutadas para mantener las cuentas en un correcto balance. Cuando algo impide que una de las sentencias en la transaccin sea ejecutada, las otras sentencias de la transaccin pueden ser desechas.

Parcial II: 1.1 DML

Leccin 8

Agregando una nueva fila a la tabla En la imagen anterior la adicin de un nuevo departamento a la tabla DEPARTMENTS.

Se puede aadir nuevas filas a una tabla con el uso de la sentencia INSERT. Sintaxis: table es el nombre de la tabla column es el nombre de la columna de la tabla a ser poblada value es el valor de la correspondiente columna Nota: en esta sentencia con la clusula VALUES se agrega solamente una fila a la vez a la tabla. 2

Parcial II: 1.1 DML

Leccin 8

Puesto que cuando se inserta una nueva fila esta contiene valores para cada columna, la lista de columnas no es requerida en una clusula INSERT. Sin embargo, si no se utiliza la lista de columnas, los valores deben ser listados, de acuerdo al orden por defecto de las columnas en la tabla, y los valores deben ser proporcionados para cada columna.

Por claridad, utilice la lista de columnas en la clusula INSERT. Encierre los caracteres y fechas entre comillas sencillas; esto no es recomendado para valores numricos. Los valores numricos no deben ser encerrados entre comillas sencillas, puesto que la conversin implcita puede tomar lugar para valores numricos asignados a una columna con tipo de dato NUMBER sin ser necesario.

Parcial II: 1.1 DML

Leccin 8

Mtodos para insertar valores nulos Metodo


Implcito Explicito

Descripcin

Omite la columna de una lista de columnas Especificar la palabra reservada NULL en la lista de valores, Especificar la cadena vaca () en la lista de valores para cadenas de caracteres y datos

Este seguro de que puede utilizar valores nulos en una columna verificando el estatus con el comando DESCRIBE de iSQL*Plus. El servidor de Oracle automticamente hace cumplir los tipos de dato, rangos de datos y reglas de integridad. Ninguna columna que no sea mencionada explcitamente obtiene un valor nulo en una nueva fila. Los errores comunes que pueden ocurrir cuando el usuario inserte datos son: Olvidar valores obligatorios para columnas que no aceptan valores nulos Duplicar valores violando reglas de valores nicos Infringir reglas de integridad de llaves forneas Romper reglas de integridad de tipo CHECK o verificacin Incompatibilidad en tipos de datos Valores ms grandes que los especificados para la columna

Parcial II: 1.1 DML

Leccin 8

Insertando valores especiales con funciones SQL Se pueden utilizar funciones para agregar valores especiales a una tabla. En el ejemplo anterior se registra informacin para el empleado Popp en la tabla EMPLOYEES. A este se le proporciona la fecha y hora actual en la columna HIRE_DATE utilizando la funcin SYSDATE. Tambin se puede usar la funcin USER cuando inserte filas en una tabla. La funcin USER registra el usuario actual. Confirmando inserciones en una tabla

Parcial II: 1.1 DML

Leccin 8

Insertando valores de fecha y hora especficos El formato DD-MON-YY es usualmente utilizado para insertar fechas. Con este formato, recuerde que el siglo por defecto es el siglo actual. Y puesto que la fecha tambin debe contener informacin de la hora, que por defecto es medianoche (00:00:00). Si una fecha debe ser ingresada en otro formato que no sea el formato por defecto, por ejemplo, con otro siglo, o con una hora especfica, se debe utilizar la funcin TO_DATE. En el ejemplo de la imagen anterior se registra informacin para el empleado Raphealy en la tabla EMPLOYEES. Se establece para la columna HIRE_DATE February 3, 1999. Si usas la siguiente sentencia en lugar de la del ejemplo anterior, el ao es interpretado como 2099.

Si el formato RR es usado, el sistema proporciona automticamente el siglo correcto, aun si este no es el actual.

Parcial II: 1.1 DML

Leccin 8

Creando un Script para manipular datos Se pueden almacenar comandos con variables de sustitucin en un archivo y ser posteriormente ejecutados. En el ejemplo anterior la informacin se almacena para un departamento en la tabla DEPARTMENTS. Ejecute el Script e ingrese los valores para las variables de sustitucin. Esto permite que se ejecute el Script una y otra vez, proporcionando valores diferentes en cada ocasin.

Copiando filas de otra tabla Se puede usar la sentencia INSERT para agregar filas a una tabla donde los valores sean obtenidos de tablas existentes. En lugar de la clusula VALUES, se utiliza una sub consulta. 7

Parcial II: 1.1 DML Sintaxis: table column sub consulta

Leccin 8

es el nombre de la tabla es el nombre de la columna en la tabla a poblar es la sub consulta que obtiene las filas de la tabla

El nmero de columnas y sus tipos de datos en la lista de columnas de la clusula INSERT debe corresponder al nmero de valores y tipos de datos de la sub consulta. Para crear una copia de las filas de una tabla, use SELECT * en la sub consulta.

Cambiando datos en una tabla En la imagen anterior se ilustra el cambio del nmero de departamento para los empleados del departamento 60 al departamento 30.

Parcial II: 1.1 DML

Leccin 8

Actualizando filas Se pueden modificar filas existentes con el uso de la sentencia UPDATE. Sintaxis: table es el nombre de la tabla column es el nombre de la columna en la tabla a poblar value es el valor correspondiente o sub consulta para la columna condition identifica las filas que sern actualizadas y se compone de nombres de columnas, expresiones, constantes, sub consultas y operadores de comparacin. Confirme la operacin de actualizacin consultando en la tabla las filas modificadas. Nota: en general, utilice llaves primarias para identificar una fila en particular. Utilizando otras columnas se puede inesperadamente causar la actualizacin de diversas filas. Por ejemplo, identificar una fila determinada en la tabla EMPLOYEES por medio de los apellido es peligroso puesto que ms de un empleado puede tener el mismo apellido.

Parcial II: 1.1 DML

Leccin 8

La sentencia UPDATE modifica las filas indicadas si la clusula WHERE es especificada. En el ejemplo anterior se transfiere al empleado 113 (Popp) al departamento 70. Si se omite la clusula WHERE, todas las filas de la tabla son modificadas.

10

Parcial II: 1.1 DML

Leccin 8

Actualizando columnas con sub consultas Se pueden actualizar mltiples columnas en una clusula SET de una sentencia UPDATE con diversas sub consultas. Sintaxis:

Nota: si no se actualizan filas, el mensaje 0 rows updated es mostrado.

11

Parcial II: 1.1 DML

Leccin 8

Actualizando filas con base en otra tabla Se pueden utilizar sub consultas en sentencias UPDATE para actualizar filas en una tabla. El ejemplo de la imagen anterior actualiza la tabla COPY_EMP con base en los valores de la tabla EMPLOYEES. Cambiando el nmero de departamento de todos los empleados cuyo puesto sea igual al puesto del empleado 200 al nmero de departamento del empleado 100.

Errores por reglas de integridad Si se intenta actualizar un registro con un valor que esta relacionado con una regla de integridad, se obtendr un error. En el ejemplo anterior el nmero de departamento 55 no existe en la tabla padre, DEPARTMENTS, y por lo tanto se obtiene una violacin de llave padre (parent key ORA-02291). 12

Parcial II: 1.1 DML

Leccin 8

Nota: las reglas de integridad aseguran que los datos se apeguen a un conjunto de reglas establecidas. En los siguientes captulos revisaremos las reglas de integridad con mayor profundidad.

Removiendo filas de una tabla En la imagen anterior se elimina el departamento Finance de la tabla DEPARTMENTS (asumiendo que no existen reglas de integridad definidas en la tabla DEPARTMENTS).

13

Parcial II: 1.1 DML

Leccin 8

Eliminando filas Se pueden eliminar filas existentes utilizando la sentencia DELETE. Sintaxis table condition es el nombre de la tabla identifica las filas que sern eliminadas y esta compuesta de nombre de columnas, expresiones, constantes, sub consultas y operadores de comparacin

Nota: si no hay filas eliminadas, el mensaje 0 rows deleted es mostrado.

Se pueden eliminar filas especficas utilizando la clusula WHERE en la sentencia DELETE. En el ejemplo se elimina el departamento Finance de la 14

Parcial II: 1.1 DML

Leccin 8

tabla DEPARTMENTS. Se puede confirmar la operacin de borrado desplegando las filas eliminadas usando la sentencia SELECT.

Si se omite la clusula WHERE, todas las filas de la tabla sern eliminadas. En el segundo ejemplo todas las filas de la tabla COPY_EMP son eliminadas, puesto que la clusula WHERE no ha sido especificada. Ejemplo Remueve las filas especificadas en la clusula WHERE.

Eliminando filas con base en otras tablas Se pueden utilizar sub consultas para eliminar filas de una tabla basndose en valores de otra tabla. En la imagen anterior se eliminan todos los empleados que estn en el departamento donde el nombre de este contiene la cadena Public. La sub consulta busca en la tabla DEPARTMENTS para localizar el nmero de departamento cuyo nombre contenga la cadena Public,

15

Parcial II: 1.1 DML

Leccin 8

proporcionando el resultado a la consulta principal, el cul elimina las filas de la tabla EMPLOYEES.

Errores por reglas de integridad Si se intenta eliminar un registro con un valor que es requerido en una regla de integridad, se obtiene un error. En el ejemplo se intenta eliminar el departamento 60 de la tabla DEPARTMENTS, pero esto causa un error puesto que este departamento es usado como llave fornea (foreign key) en la tabla EMPLOYEES. Si el registro padre que se intenta eliminar tiene registros hijos, entonces se recibe el siguiente mensaje de error child record found ORA02292. La siguiente sentencia no causa un error puesto que no hay empleados en el departamento 70:

16

Parcial II: 1.1 DML

Leccin 8

Usando una sub consulta en una sentencia INSERT Se pueden utilizar sub consultas en lugar del nombre de la tabla en la clusula INTO de una sentencia INSERT. La lista seleccionada de esta sub consulta debe tener el mismo nmero de columnas como la lista de columnas de la clusula VALUES. Cualquier regla en las columnas de la tabla base debe ser seguida por la sentencia INSERT para trabajar satisfactoriamente. Por ejemplo, no se puede poner un nmero de empleado duplicado, ni dejar sin valor columnas obligatorias o no nulas. En el siguiente ejemplo se muestran los resultados de la sub consulta que ha sido utilizada para identificar la tabla de la sentencia INSERT

17

Parcial II: 1.1 DML

Leccin 8

La palabra reservada WITH CHECK OPTION Especifique WITH CHECK OPTION para indicar que, si la sub consulta es utilizada en lugar de una tabla en una sentencia INSERT, UPDATE o DELETE, ningn cambio que produciran las filas que no sea incluido en la sub consulta sea permitido para esta tabla. En el ejemplo anterior, la palabra reservada WITH CHECK OPTION es usada. La sub consulta identifica las filas que hay en el departamento 50, pero el nmero del departamento no este en la lista del SELECT, y un valor no es proporcionado para este en la lista de la clusula VALUES. Insertando esta fila resultara para el nmero de departamento un valor nulo, puesto que no esta en la sub consulta.

18

Parcial II: 1.1 DML

Leccin 8

Utilizando valores explcitos por defecto Especifique DEFAULT para establecer el valor de la columna previamente especificado como el valor por defecto para esta columna. Si no tiene un valor por defecto la correspondiente columna que ha sido especificada, Oracle establece a la columna un valor nulo. En el primer ejemplo, la sentencia INSERT utiliza un valor por defecto para la columna MANAGER_ID. Si no se define un valor por defecto para la columna, un valor nulo es insertado en su lugar. En el segundo ejemplo, se usa la sentencia UPDATE para establecer en la columna MANAGER_ID un valor por defecto para el departamento 10. Si no es definido un valor por defecto para la columna, esta cambiara su valor a nulo. Nota: Cuando se crea una tabla, se pueden especificar los valores por defecto para cada columna. Esto ser revisado en el captulo Creacin y administracin de tablas. Sentencia MERGE SQL ha sido extendido para incluir la sentencia MERGE. Utilizando esta sentencia, se puede actualizar o insertar una fila condicionalmente en una tabla, y de esta manera evitar mltiples sentencias UPDATE. La decisin de insertar o actualizar en la tabla especificada se basa en la condicin de la clusula ON. Puesto que el comando MERGE combina los comandos INSERT y UPDATE, se requieren de ambos privilegios para la tabla que se afectara y el privilegio SELECT de la tabla origen de la informacin. La sentencia MERGE es deterministica. No se puede actualizar la misma fila de la tabla destino varias veces en la misma sentencia MERGE.

19

Parcial II: 1.1 DML

Leccin 8

Un mtodo alternativo es usarlo en ciclos PL/SQL y en mltiples sentencias DML. La sentencia MERGE, sin embargo, es fcil de usar y ms simplemente expresada como una simple sentencia SQL. La sentencia MERGE es adecuada para aplicaciones de almacenes. Por ejemplo, en informacin de aplicaciones de almacn, se puede necesitar trabajar con datos procedentes de diferentes lugares, algunos de los cuales pueden ser duplicados. Con la sentencia MERGE se puede condicionar el aadir o modificar filas.

Sintaxis: INTO clause insertada USING clause ON clause WHEN MATCHED | WHEN NOT MATCHED

especifica la tabla a ser actualizada o identifica el origen de los datos que sern actualizados o insertados; puede ser una tabla, vista o sub consulta condicin sobre la cual la sentencia MERGE operar la actualizacin o insercin indica al servidor como responder a los resultados de la condicin join.

20

Parcial II: 1.1 DML

Leccin 8

En el ejemplo se muestra la comparacin de la columna EMPLOYEE_ID de la tabla COPY_EMP a la columna EMPLOYEE_ID de la tabla EMPLOYEES. Si la comparacin se encuentra, la fila de la tabla COPY_EMP es actualizada con la correspondiente fila de la tabla EMPLOYEES. Si la fila no se encuentra, esta es insertada en la tabla COPY_EMP.

21

Parcial II: 1.1 DML

Leccin 8

La condicin c.employee_id = e.employee_id es evaluada. Suponiendo que la tabla COPY_EMP esta vaca, la condicin ser falsa: no hay comparaciones. La lgica cae en la clusula WHEN NOT MATCHED y el comando MERGE inserta las filas de la tabla EMPLOYEES a la tabla COPY_EMP. Si las filas existieran en la tabla COPY_EMP y la columna EMPLOYEE_ID correspondiera en ambas tablas, las filas existentes en la tabla COPY_EMP seran actualizadas por su correspondiente fila de la tabla EMPLOYEES. Resumen En este captulo se ha visto como utilizar las sentencias DML Sentencia
INSERT UPDATE DELETE MERGE

Descripcin
Aade una nueva fila a una tabla Modifica filas existentes de una tabla Elimina filas existentes de una tabla Condicionalmente inserta o modifica datos en una tabla

22

También podría gustarte