Lenguaje de manipulación de datos



Documentos relacionados
Manipulando Datos. y Transacciones

Base de datos relacional

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

Sub consultas avanzadas

Manual de usuario. Modulo Configurador V.1.0.1

La ventana de Microsoft Excel

CONSULTAS BASICAS EN SQL SERVER

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

LABORATORIO 10. Concurrencia y bloqueos en el SMBD Oracle

ADMINISTRACIÓN DE BASES DE DATOS DISTRIBUIDAS

TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

QUÉ ES UNA BASE DE DATOS Y CUÁLES SON LOS PRINCIPALES TIPOS? EJEMPLOS: MYSQL, SQLSERVER, ORACLE, POSTGRESQL, INFORMIX (DV00204A)

Tabla de contenido. Manual B1 Time Task

Recursos de Aprendizaje

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

5- Uso de sentencias avanzadas

Consultas con combinaciones

BANCOS. Manejo de Bancos. Como crear una ficha de Banco? Como modificar los datos de una ficha de Banco? Como borrar una ficha de Banco?

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

MANUAL DE USUARIO DE LA HERAMIENTA CONFIGURACION DE PRESUPUESTOS PARA DISTRIBUIDORES

Centro de Capacitación en Informática

Base de Datos Práctica 1.

MATERIAL 2 EXCEL 2007

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Manual de Usuario del Correo Electrónico IBM Lotus inotes 8.5.1

ADMINISTRACIÓN DE BASE DE DATOS

BASE DE DATOS RELACIONALES

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

SQL (Structured Query Language)

Comisión Nacional de Bancos y Seguros

Manual etime para supervisores

INMAX SISTEMA DE FACTURACION E CONTROL DE INVENTARIO GUIA RAPIDA DEL USUARIO

SISTEMA InfoSGA Manual de Actualización Mensajeros Radio Worldwide C.A Código Postal 1060

Figura 1 Abrir nueva hoja de cálculo

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

Recuperacion de Desastre en SQL Server Mejoras

ANEXO (NÓMINA DE CANDIDATOS EN SOPORTE INFORMÁTICO

Figura 4.1 Clasificación de los lenguajes de bases de datos

A.1. Definiciones de datos en SQL

SISTEMA DE BECAS AL EXTERIOR

P/. Factura Electrónica D/. Manual de Usuario Proveedores

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Guía del usuario de DocuShare Agent

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

ÉSTE DOCUMENTO SUFRIÓ UN CAMBIO SIGNIFICATIVO

SISTEMA ACADEMICO-ADMINISTRATIVO MANUAL BÁSICO

3 Consultas y subconsultas

Instrucción IrA (GoTo). Saltos no naturales en el flujo normal de un programa. Pseudocódigo y diagramas de flujo. (CU00182A)

GUIA PARA EL USO DE E-BANKING. Transacciones a un solo clic!

Manual de usuario Sucursal Virtual

Módulo II - PowerPoint

Microsoft SQL Server 2005

GUÍA DE CONFIGURACIÓN DEL MÓDULO DE FACTURACIÓN ELECTRÓNICA. SoftRestaurant 2012 SISTEMA DE ADMINISTRACIÓN DE BARES Y RESTAURANTES SOFTRESTAURANT

APLICACIÓN ELECTRÓNICA DE INVESTORS TRUST PARA INTRODUCTORES

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

REGISTRO CIVIL MANUAL DE USUARIO

CÓMO CREAR NUESTRO CATÁLOGO

SISTEMA ETAP en línea Estándares Tecnológicos para la Administración Pública

SITRÁN ARAGÓN TRÁMITES Y SERVICIOS EN LÍNEA (WEB GANADEROS) SOLICITUD CERTIFICADOS SANITARIOS

ESPAÑOL BLACK-VS. Guía de uso e instalación

Capacitación Regístrelo Cosméticos

GOOGLE NOTICIAS Y ALERTAS

Tabla De Contenido. 1) Modulo de compras ) Estructura del modulo de compras 4. a) Modo de acceso al modulo de compras 4

Preguntas Frecuentes. Plataforma ScienTI. Aplicativos CvLAC y GrupLAC

Sistema Integral de Tesorería Módulo de Contabilidad Manual de Operación

QUÉ ES HOMEBASE? Encontrar Libros

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

Creación y Gestión de Tablas. Copyright Oracle Corporation, All rights reserved.

Certificado de Defunción Electrónico Versión 1.0

Operación de Microsoft Excel. Guía del Usuario Página 79. Centro de Capacitación en Informática

Transacciones y bloqueos en SQL-Server

Guía rápida para editores

Gastos Reales Web Manual de Usuario

CURSO DE SQL SERVER 2005

UNIDAD DIDACTICA 1: SISTEMAS GESTORES DE BASES DE DATOS

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

CONSEJERÍA DE EDUCACIÓN SÉNECA MÓVIL. Manual de uso de la versión on line para el control de las ausencias del alumnado.

Utilización del programa de Orabench Versión para Migración. Describir los pasos para la utilización del programa Orabench de Oracle.

Descarga Automática. Manual de Usuario. Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, Madrid

PROYECTO EDUCATIVO LA CALERA

IV. CARGUE DE SOPORTES

Operación 8 Claves para la ISO

INTRODUCCIÓN A LOS SISTEMAS GESTORES DE BASE DE DATOS

Revista Electrónica Granma Ciencia. Vol.10, No.2, Mayo - Agosto de 2006 ISSN X

Importador Universal - Operaciones

HP Backup and Recovery Manager

ANEXO. PROCESOS PARA MANEJAR EL COSTO DE LO VENDIDO EN ASPEL-SAE

Manual de Usuario Comprador Módulo de Compras

S I S T E M A E N L Í N E A

BASES DE DATOS AVANZADAS Transacciones en MYSQL

8 SQL SERVER 2008 RA-MA

Cómo ingresar a la Sucursal Electrónica?

6 - Recuperar algunos registros (where)

APUNTES DE WINDOWS. Windows y sus Elementos INSTITUTO DE CAPACITACIÓN PROFESIONAL. Elementos de Windows

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

SIIT SISTEMA INFORMÁTICO DE INSPECCIONES DE TRABAJO. Modulo de Planificación Manual de Usuario

Transcripción:

Lenguaje de manipulación de datos El lenguaje de manipulación de datos (DML) es una parte central de SQL. Cuando necesite agregar, actualizar o eliminar un dato en la base de datos, se ejecuta una sentencia DML. Una colección de sentencias DML que forman una unidad lógica de trabajo es llamada transacción. Considere una base de datos de un banco. Cuando un cliente del banco transfiere dinero desde una cuenta de ahorros a una cuenta de cheques, la transacción puede consistir de tres operaciones separadas: reducir los ahorros de la cuenta de ahorros, incrementar la cuenta de cheques y registrar la transacción en un registro de transacciones. El servidor Oracle debe garantizar que todas las tres sentencias SQL son realizadas para mantener las cuentas en el balance adecuado. Cuando algo evita que una de las sentencias en la transacción pueda ejecutarse, las otras transacciones deben ser desechadas.

Agregando un nuevo registró a una tabla La grafica de la presentación ilustra la adición de un nuevo departamento a la tabla DEPARTMENTS

Sintaxis sentencia INSERT Puede adicionar nuevos registros a una tabla usando la sentencia INSERT En la sintaxis table column value Es el nombre de la tabla Es el nombre de la columna en la tabla a llenar Es el valor correspondiente para la columna Nota: esta sentencia con la cláusula VALUES adiciona solo una fila a la vez a la tabla.

Insertando nuevas filas Debido a que puede insertar una nueva fila que contiene valores para cada columna, la lista de columnas no es obligatoria en una clausula INSERT. Sin embargo, si no usa la lista de columnas, los valores deben ser listados de acuerdo al orden por defecto de las columnas de la tabla, y un valor debe ser provisto por cada columna. Por claridad, use la lista de columnas en la cláusula INSERT. Encierre caracteres y valores fechas entre comillas simples; sin embargo, no es recomendable que encierre entre comillas simples valores numéricos.

Insertando filas con valores nulos Método Implícito Explicito Descripción Omita la columna del listado de columnas Especifique la palabra clave NULL en la lista VALUES; Especifique la cadena vacia( ) en la lista VALUES para cadenas de caracteres y fechas. Asegúrese de poder usar valores nulos para la columna destino verificando la columna con el comando DESCRIBE. El servidor Oracle automáticamente hace cumplir todos los tipos de datos, rangos de datos, y restricciones de integridad de datos. Cualquier columna que no es listada explícitamente obtiene un valor nulo en la nueva fila. Errores comunes que pueden ocurrir durante el ingreso de datos por el usuario son listados en el siguiente orden: Valores obligatorios faltantes para una columna NOT NULL. Valores duplicados violando cualquier restricción de llave primaria o única. Algún valor violando la restricción de chequeo (CHECK) Integridad referencial mantenida por restricciones de llave foránea

Tipos de datos no equivalentes o valores muy grandes para llenar una columna Nota: El uso de la lista de columnas es recomendable ya que hace la sentencia INSERT mas legible y segura o menos propensa a errores.

Insertando Valores especiales Puede usar funciones para insertar valores especiales a una tabla. En el ejemplo de la presentación se registra información para un empleado Popp en la tabla empleado. Se obtiene la fecha y hora actual en la columna HIRE_DATE. Se usa la función SYSDATE que retorna y la fecha y hora actual en el servidor de base de datos. Puede usar también la función CURRENT_DATE para obtener la fecha actual en la sección de zona de tiempo. Puede usar también la función USER cuando inserta filas en la tabla. La función USER registra el nombre de usuario actual.

Insertando fechas específicas y valores de tiempo El formato DD-MON-RR es generalmente utilizado para insertar un valor fecha. Con el formato RR, el sistema brinda la centuria correcta automáticamente. Puede de igual forma proveer una fecha en el formato DD-MON-YYYY. Este es recomendado porque claramente especifica la centuria y no depende del formato lógico interno RR para especificar la centuria. Si la fecha necesita ser ingresada en un formato diferente al definido por defecto (por ejemplo, con otra centuria o un tiempo específico), debe usar la función TO_DATE El ejemplo en la presentación registra información para el empleado Raphealy en la tabla EMPLOYEES. Se ingresa el valor feb 3, 1999 para la columna HIRE_DATE.

Creando un Script Puede grabar comandos con variables de sustitución en un archivo y ejecutar los comandos en el archivo. El ejemplo de la presentación registra información para un departamento de la tabla DEPARTMENTS. Al Correr el archivo de script inmediatamente se le pregunta por el valor de cada variable de sustitución. Después de entrar el valor de la variable de sustitución debe presionar el botón Ok. Los valores entonces ingresados son sustituidos en la sentencia. Esto permite correr el mismo script una y otra vez pero proveyendo valores diferentes cada vez que se ejecuta.

Copiando filas de otra tabla Puede usar la sentencia INSERT para agregar filas con datos provenientes de datos en tablas existentes. En el ejemplo de la presentación para que la sentencia INSERT INTO funcione, debe haber creado la tabla sales_reps usando la sentencia CREATE TABLE. En lugar de la cláusula VALUES usa una subconsulta. Sintaxis INSERT INTO Tabla [Columna1 (, Columna2)] Subconsulta; En la sintaxis: Tabla Columna Subconsulta es el nombre de la tabla es el nombre de la columna en la tabla a poblar es la subconsulta que retorna filas a la tabla El número de columnas y sus tipos de datos en la lista de columnas de la sentencia INSERT debe concordar con el número de valores y sus tipos de datos en la subconsulta. Cero o más filas son adicionadas dependiendo del número de filas retornadas por la subconsulta. Para crear una copia de las filas de una tabla, use SELECT * en la subconsulta.

Cambiando datos en una tabla La presentación ilustra cambios en el número de departamento para empleados en el departamento 60 al departamento 80

Sintaxis de la sentencia UPDATE Puede modificar los valores existentes en una tabla usando la sentencia UPDATE. En la sintaxis: Table Column Value Condicion es el nombre de la tabla es el nombre de la columna en la tabla a poblar es el valor correspondiente o subconsulta para la columna Identifica las filas a ser actualizadas y está compuesta de nombres de columna, expresiones, constantes, subconsultas y operadores de comparación Confirme la operación de actualización por una consulta que muestre los registros de la tabla actualizados. Nota: en general, use la columna de llave primaria en la cláusula WHERE para identificar una única fila para actualizar. Usando otras columnas puede de manera inesperada causar varias filas actualizadas. Por ejemplo, identificando una fila única en la tabla EMPLOYEES por el nombre es peligroso, porque más de un empleado podría tener el mismo nombre.

Actualizando filas en una tabla La sentencia UPDATE modifica los valores de una fila específica o filas específicas si la cláusula WHERE es especificada. El ejemplo en la presentación muestra la transferencia del empleado 113(popp) al departamento 50. Si omite la cláusula WHERE, los valores de todas las filas de la tabla son modificados.

Actualizando dos columnas con una subconsulta Puede actualizar múltiples columnas en la cláusula SET de una sentencia UPDATE escribiendo múltiples subconsultas. La sintaxis es como la siguiente UPDATE SET tabla columna1 = (SELECT columna FROM tabla WHERE condicion), Columna2 = (SELECT columna FROM table WHERE condicion) El ejemplo de la presentación pudo haber escrito también de la siguiente forma; UPDATE employees SET (job_id,salary) = (SELECT job_id, salary FROM employees WHERE employee_id=205) WHERE employee_id = 113;

Actualizando filas basadas en otra tabla Puede usar subconsultas en la sentencia UPDATE para actualizar valores en una tabla. El ejemplo en la presentación actualiza la tabla COPY_EMP basándose en los valores de la tabla EMPLOYEES. Cambian el número de departamento de todos los empleados cuyo job_id es igual al del empleado 200 al número de departamento actual del empleado de código 100.

Eliminando una fila de una tabla El departamento Contracting ha sido eliminado de la tabla DEPARTMENTS (asumiendo que no se han violado restricciones en la tabla DEPARTMENTS), como se muestra en la gráfica de la diapositiva.

Sintaxis sentencia DELETE Puede eliminar filas existentes de una tabla usando la sentencia DELETE. En la sintaxis: Table Condition Es el nombre de la tabla Identifica las filas a ser eliminadas y está compuesta de nombres de columnas, expresiones, constantes, subconsultas y operadores de comparación Nota: Si ninguna fila es eliminada, el mensaje 0 filas eliminadas es retornado.

Eliminado filas de una tabla Puede eliminar filas específicas estableciendo la cláusula WHERE en la sentencia DELETE. El primer ejemplo de la diapositiva elimina el departamento Accounting de la tabla DEPARTMENTS. Puede confirmar la operación de eliminación desplegando las filas eliminadas usando una sentencia SELECT. SELECT * FROM departments WHERE department_name= Finance ; Sin embargo, si omite la cláusula WHERE, todas las filas en la tabla son eliminadas. El segundo ejemplo en la diapositiva elimina todas las filas de la tabla COPY_EMP, porque no hay clausula WHERE especificada. Ejemplos:

Eliminando filas basándose en otras tablas Puede usar subconsultas para eliminar filas de una tabla basándose en valores de otra tabla. El ejemplo en la diapositiva elimina todos los empleados en un departamento, donde el nombre del departamento contiene la palabra Public. La subconsulta explora la tabla DEPARTMENTS encontrando el código del departamento basándose en que el nombre del departamento contenga la palabra Public. La subconsulta entonces llena el número de departamento para la consulta principal, la cual elimina filas de la tabla EMPLOYEES basándose en este número de departamento.

Sentencia TRUNCATE Un método más eficiente de vaciado de una tabla es usando la sentencia TRUNCATE. Puede usar la sentencia TRUNCATE para rápidamente eliminar todas las filas de una tabla o grupo. Eliminar filas con la sentencia TRUNCATE es más rápido que hacerlo con la sentencia DELETE por las siguientes razones: La sentencia TRUNCATE es una sentencia del lenguaje de definición de datos (DDL) y no genera información de rollback. Truncando una tabla no se disparan los triggers de eliminación de la tabla Si la tabla es parte de una restricción de integridad referencial, no podrá truncar la tabla. Necesita deshabilitar la restricción antes de emitir la sentencia TRUNCATE.

Transacciones de bases de datos El servidor Oracle asegura la consistencia de los datos basándose en transacciones. Las transacciones dan más flexibilidad y control cuando se cambian los datos, y aseguran la consistencia de los datos en eventos de fallos de procesos de usuario o fallos del sistema. Las transacciones constan de sentencias DML que constituyen un cambio consistente de datos. Por ejemplo, una transferencia de fondos entre dos cuentas debe incluir el débito en una cuenta y crédito a otra cuenta por la misma cantidad. Ambas acciones deben fallar en conjunto o completarse en conjunto. Tipos de transacciones: Tipo Lenguaje de manipulación de datos (DML) Lenguaje de definición de datos (DDL) Lenguaje de control de datos (DCL) Descripción Consiste en cualquier número de sentencias DML que el servidor Oracle puede tratar como una única entidad o unidad lógica de trabajo Consiste en solo una sentencia DDL Consiste en solo una sentencia DCL

Transacciones de Bases de datos; Inicio y Fin Cuándo una transacción inicia y finaliza? Una transacción inicia cuando la primera sentencia DML es encontrada y finaliza cuando uno de los siguientes eventos ocurre: Una sentencia COMMIT o ROLLBACK es emitida Una sentencia DDL, tal como CREATE es omitida Una sentencia DCL es omitida El usuario se sale de SQL Developer o SQL *Plus La máquina falla o el sistema se cae Después que una transacción termina, la próxima sentencia SQL automáticamente inicia la siguiente transacción. Una sentencia DDL o una sentencia DCL es automáticamente confirmada y por lo tanto implícitamente termina la transacción.

Ventajas de las sentencias COMMIT y ROLLBACK Con las sentencias COMMIT y ROLLBACK, puede controlar el hacer en los cambios de manera permanente.

Sentencias del control explícito de transacciones Puede controlar la lógica de las transacciones usando las sentencias COMMIT, ROLLBACK y SAVEPOINT. Sentencia COMMIT SAVEPOINT name ROLLBACK ROLLBACK TO SAVEPOINT name Descripción Termina la transacción actual haciendo todos los cambios pendientes permanentes Marca un punto de retorno para la transacción actual ROLLBACK termina la transacción actual descartando todos los cambios pendientes ROLLBACK TO SAVEPOINT hace retroceder la transacción actual a un punto específico de retorno, así descartando cualquier cambio o punto de retorno que fueron creados después del punto de retorno al cual estamos regresando. Si omite la cláusula TO SAVEPOINT, la sentencia ROLLBACK retrocede la transacción entera. Como los puntos de retornos son lógicos, no hay forma de listar los puntos de retornos creados. Nota: no puede hacer COMMIT a un SAVEPOINT, el SAVEPOINT no es del estándar ANSI SQL

Retrocediendo cambios hasta una marca Puede crear marcas en la transacción actual usando la sentencia SAVEPOINT, la cual divide la transacción en pequeñas secciones. Puede entonces descartar cambios pendientes hasta una marca usando la sentencia ROLLBACK TO SAVEPOINT. Note, que si crea un segundo punto de retorno con el mismo nombre de un punto de retorno previo, el punto de retorno previo es eliminado.

Proceso implícito de transacciones Estado Circunstancia Commit automático Una sentencia DDL o DCL es realizada SQL Developer o SQL *Plus sale normalmente, sin usar explícitamente los comando COMMIT ni ROLLBACK Rollback automático Terminación anormal de SQL Developer o SQL *Plus o falla del sistema Nota: En SQL *Plus, el comando AUTOCOMMIT puede ser fijada ON u OFF. Si es fijada ON, cada sentencia individual DML es confirmada tan pronto como es ejecutada. No puede deshacer los cambios. Si es fijada en OFF, la sentencia COMMIT puede aún ser usada de manera explícita. También, la sentencia COMMIT es expedida cuando una sentencia DDL es emitida o cuando se sale de SQL *Plus. El comando SET AUTOCOMMIT ON/OFF es saltada en SQL Developer. Un DML es confirmado en una salida normal de SQL Developer solo si tiene habilitada la preferencia AUTOCOMMIT. Para habilitar el AUTOCOMMIT, desarrolle lo siguiente: En el menú Tools, seleccione Preferences. En el cuadro de dialogo de Preferences, expanda Database y seleccione Worksheet Parameters. El panel derecho, chequee la opción Autocommit in SQL Worksheet.

Fallas del sistema Cuando una transacción es interrumpida por una falla del sistema, la transacción entera es automáticamente descartada. Esto previene que el error cause cambios no deseados a los datos y retorna las tablas al estado anterior al último COMMIT. De este modo, el servidor Oracle protege la integridad de las tablas. En SQL Developer, una salida normal de la sesión es cumplida seleccionando EXIT desde el menú FILE. En SQL *Plus, una salida normal es cumplida entrando el comando EXIT en la línea de comandos. Cerrar la ventana es considerada como una salida anormal.

Estado de los datos antes de un COMMIT o ROLLBACK Cada cambio de dato hecho durante una transacción es temporal hasta que la transacción es confirmada. El estado de los datos antes de las sentencias COMMIT y ROLLBACK puede ser descrito de la siguiente forma: Operaciones de manipulación de datos afectan primeramente el buffer de la base de datos; por lo tanto, el estado previo de los datos puede ser recuperado. El usuario actual puede revisar los resultados de operaciones de manipulación de datos consultando las tablas Otros usuarios no pueden ver los resultados de operaciones de manipulación de datos realizados por el usuario actual. Las filas afectadas son bloqueadas

Estado de los datos después de un COMMIT Haga todos los cambios pendientes permanentes usando la sentencia COMMIT. Aquí esta lo que pasa después de una sentencia COMMIT: Cambios de los datos son escritos a la base de datos El estado previo de los datos no están más disponibles con sentencias SQL normales Todos los usuarios pueden ver los resultados de la transacción Los bloqueos en las filas afectadas es liberado; Las filas están ahora disponibles para que otros usuarios puedan realizar nuevos cambios Todo los puntos de retorno son eliminados

Confirmando datos En el ejemplo de la diapositiva, una fila es eliminada de la tabla EMPLOYEES y una nueva fila es insertada en la tabla DEPARTMENTS. Los cambios son grabados usando la sentencia COMMIT. Ejemplo: Eliminar los departamentos 209 y 300 en la tabla DEPARTMENTS y actualizar una fila en la tabla EMPLOYEES. Almacenar los cambios.

Estado de los datos después de un ROLLBACK Descarte todos los cambios pendientes usando la sentencia ROLLBACK, la cual resulta en lo siguiente; Los cambios de datos son deshechos El estado previo de los datos es restaurado Bloqueos en las filas afectadas son liberados.

Estado delos datos después de un ROLLBACK: ejemplo Mientras intenta eliminar un registro de la tabla TEST, puede accidentalmente vaciar la tabla. Sin embargo, puede corregir el error reeditando una sentencia apropiada, y hacer los cambios de los datos permanentes.

Nivel Sentencia Rollback Una parte de la transacción puede ser descartada mediante un rollback implícito si un error de ejecución de sentencia es detectado. Si una única sentencia DML falla durante la ejecución de la transacción, sus efectos son deshechos por un statement level rollback, pero los cambios realizados por las sentencias DML previas en la transacción no son descartadas. Ellas pueden ser confirmadas o deshechas explícitamente por el usuario. El servidor Oracle emite un Commit implícito antes y después de cualquier sentencia DDL. Incluso si su sentencia DDL no se ejecuta satisfactoriamente, no puede deshacer las sentencias previas porque el servidor emitió un commit. Termine sus transacciones explícitamente ejecutando una sentencia COMMIT o ROLLBACK

Lectura Consistente Usuarios de la base de datos acceden a ella de dos formas: Operaciones de lectura (sentencias SELECT) Operaciones de escritura (Sentencias INSERT, UPDATE y DELETE) Usted necesita leer consistentemente de manera que ocurra lo siguiente: El lector y escritor de la base de datos tienen asegurados una vista consistente de los datos Lectores no ven datos que están en proceso de ser modificados Escritores tienen asegurado que los cambios a la base de datos se realizan de una manera consistente Cambios hechos por un escritor no desordenan ni entran en conflicto con cambios realizados por otro escritor. El propósito de la lectura consistente es asegurar que cada usuario vea los datos tal y como existen en la última operación de confirmación, antes de que una operación DML inicie. Nota: El mismo usuario puede iniciar varias sesiones. Cada sesión tendrá consistencia de lectura en la forma descrita anteriormente, incluso si es el mismo usuario.

Implementación de lectura consistente Lectura consistente es una implementación automática. Conserva una copia parcial de la base de datos en los segmentos de rehacer. La imagen de lectura consistente es construida de los datos confirmados de la tabla y los datos viejos de la tabla que están siendo modificados y que aún no han sido confirmados desde el segmento de rehacer. Cuando una operación INSERT, UPDATE o DELETE es echa en la base de datos, el servidor Oracle toma de los datos antes de que sean modificados y la escribe en el segmento de rehacer. Todos los lectores, excepto el que realiza el cambio, ve la base de datos como estaba antes de que los cambios iniciaran; ellos ven una fotografía de lo que está en el segmento de rehacer. Antes que los cambios son confirmados en la base de datos, solamente el usuario que realiza los cambios ve la base de datos con las alteraciones. Todos los demás ven la fotografía del segmento de rehacer. Esto garantiza a los lectores la lectura consistente de los datos que no está actualmente sometida a cambios. Cuando una sentencia DML es confirmada, los cambios realizados a la base de datos se vuelven visibles a cada uno usando una sentencia SELECT después que la confirmación se ha realizado. El espacio ocupado por los viejos datos del archivo de segmento de rehacer es liberado para re uso. Si la transacción se deshace, los cambios son deshechos

La original vieja versión de los datos en el segmento de rehacer es escrita de nuevo a la tabla Todos los usuarios ven la base de datos tal como estaba antes de que la transacción iniciara.

Clausula FOR UPDATE en la sentencia SELECT Cuando usted expide una sentencia SELECT en la base de datos para consultar algunos registros, ningún bloqueo se establece en las filas seleccionadas. En general, esto es requerido porque el número de registros bloqueados en cualquier momento específico (por defecto) se mantiene al mínimo: solo aquellos registros que han sido modificados pero aún no son confirmados son bloqueados. Incluso entonces, otros podrán leer esos registros como aparecían antes del cambio (la imagen anterior de los datos). Hay algunas veces, sin embargo, cuando podría necesitar bloquear un conjunto de registros incluso antes de modificarlos en su programa. Oracle ofrece la cláusula FOR UPDATE de la sentencia SELECT para realizar este bloqueo. Cuando expide una sentencia SELECT FOR UPDATE, el sistema administrador de la base de datos relacional (RDBMS) automáticamente obtiene bloqueos exclusivos a nivel de registros en todos los registros identificados por la sentencia SELECT, así conserva estos registros para sus cambios solamente. Nadie más podrá modificar alguno de estos registros hasta que usted realice un ROLLBACK o un COMMIT. Puede adjuntar la palabra clave NOWAIT para la cláusula FOR UPDATE para decirle al servidor Oracle que no espere si la tabla ha sido bloqueada por otro usuario. En este caso, el control será retornado inmediatamente a su programa o a su ambiente de SQL Developer para que pueda realizar otro trabajo, o esperar por un periodo de tiempo antes de intentar de nuevo. Sin la

cláusula NOWAIT, su proceso se bloquea hasta que la tabla esté disponible, cuando el bloqueo es liberado por el otro usuario mediante la expedición del comando COMMIT o ROLLBACK.

Cláusula FOR UPDATE: ejemplos En el ejemplo de la dispositiva, la sentencia bloquea las filas en la tabla EMPLOYEES con el campo JOB_ID igual a ST_CLERK y el campo LOCATION_ID igual a 1500, y bloquea las filas en la tabla DEPARTMENTS con un campo DEPARTMENTE_LOCATION igual a 1500. Puede usar el FOR UPDATE OF nombre de columna para cualificar la columna que intenta modificar. La lista OF de la cláusula FOR UPDATE no lo restringe a modificar solo esas columnas de las filas seleccionadas. Bloqueos aún están sobre todas las filas; si usted simplemente coloca FOR UPDATE en la consulta y no incluye una o más columnas después de la palabra clave OF, la base de datos bloqueara todas las filas identificadas a través de todas las tablas listadas en la cláusula FROM. A siguiente sentencia bloquea solo esas filas en la tabla EMPLOYEES con ST_CLERK localizadas en LOCATION_ID 1500. Ninguna fila es bloqueada en la tabla DEPARTMENTS

En la siguiente sentencia, la base de datos es instruida para esperar por 5 segundos por la fila para que esté disponible, y luego retornar el control a usted.