Sepa Usar Eficientemente el COMMIT en los Packages en Oracle

Saber usar correctamente el COMMIT en los Packages en Oracle te  permitirá desarrollar procesos que guarden la información mucho más rápido y que los datos se manipulen de forma más eficiente cuando el proceso sea ejecutado por el usuario.

El comando COMMIT permite guardar en el disco duro del servidor todos los datos que han sido modificados y que se encuentran en la memoria desde el último COMMIT realizado. El trabajo de vaciar los datos desde la memoria y escribirlos en el disco duro es una tarea lenta y costosa, por eso el COMMIT se debe utilizar con precaución, es decir, grabar los datos después de cierta cantidad de datos procesados y no por cada dato que sea modificado. Revisemos un ejemplo para entender mejor estos conceptos.

Ejemplo #1: Supongamos que tenemos un proceso que debe insertar registros en una tabla, veamos primero el commit usado de forma errónea.

Procedure Prc_Guardar(pst_error out varchar2) Is

Begin

For r_dat in (select emp.rut,emp.dv,emp.nombre,emp.edad,emp.direccion from

t_empleado emp where ind_estado = 0 ) — 0=pendiente

loop

update t_empleado set ind_estado=1 — 1= procesado

where rut = r_dat.rut;

            commit;

insert into t_empleado_resp(rut,dv,nombre,edad,direccion) values (r_dat.rut,

r_dat.dv, r_dat.nombre, r_dat.edad, r_dat.direccion);

            commit;                                               

end loop;

exception

when others then pst_error:= ‘ha ocurrido un error en el proceso’;

End Prc_Guardar;

En este ejemplo después de cada update y cada insert se esta realizando un commit, esta acción esta correcta pero es un proceso demasiado lento ya que por cada modificación de datos se están guardando los cambios en el servidor de la base de datos. Veamos como se usa el commit de forma correcta:

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Procedure Prc_Guardar(pst_error out varchar2) Is

Begin

For r_dat in (select emp.rut,emp.dv,emp.nombre,emp.edad,emp.direccion from

t_empleado emp where ind_estado = 0 ) — 0=pendiente

loop

update t_empleado set ind_estado=1 — 1= procesado

where rut = r_dat.rut;

insert into t_empleado_resp(rut,dv,nombre,edad,direccion) values (r_dat.rut,

r_dat.dv, r_dat.nombre, r_dat.edad, r_dat.direccion);

end loop;

      commit;                                               

exception

when others then pst_error:= ‘ha ocurrido un error en el proceso’;

End Prc_Guardar;

Este es el mismo ejemplo anterior, pero el commit solo se realiza una vez cuando el proceso termina, este proceso es mucho más rápido y eficiente que el anterior.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Packages en Oracle, Procedures en Oracle y etiquetada , , , . Guarda el enlace permanente.

6 respuestas a Sepa Usar Eficientemente el COMMIT en los Packages en Oracle

  1. veronica dijo:

    hola, solament me gustaria comentar que tu post fue de gran ayuda para desenredar y responder muchas preguntas que tenia, pero que gracias a tu explicacion pude entender.

    gracias y porfavor no dejes de escribir tus post, son excelente de 5 estrellas!!!!!!!!!!!!

    • Hola Veronica, gracias por comunicarte y por tu excelente comentario, me da mucho gusto que la información que escribo te sea de utilidad, seguire haciendo mas artículos para mis lectores.

      PD: Ya obtuviste mi reporte gratuito sobre ‘Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aun no lo haces, puedes obtenerlo haciendo clic aquí:
      http://dominatuspackagesenoracle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  2. José Luis dijo:

    Saludos, soy nuevo en el manejo de bases de datos, algunoas cosas de tu codigo no las entiendo, pero es cuestion de investigar, son detalles pequenos, debo visitar mas seguido este sitio.
    De hecho vine porque en mi trabajo cargue unos datos que no llegaron jamas al servidor a pesar de haber cuidado la ejecucion del commit pero via grafica o sea con mouse y un simple click, van dos veces, reviso el codigo y esta bien, lo hago revisar por el jefe y esta bien.
    El hecho es que no se me ocurre otra cosa que no sea revisar mi uso del commit…
    Felicidades, haces un buen trabajo.

  3. JOSE dijo:

    Hola Roberto, quiero preguntarte, Cuantas transacciones pueden hacerse, por ejemplo usando un bucle y haciendo INSERT, para poder utilizar finalmente después de ese ciclo el commit?

    Saludos José Piñeros

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s