Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/02/2013, 14:31
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Transacciones y procedmienos almacenados

Recalco, que una transacción no está necesariamente contenida en un SP, sino que puede estar contenida, o bien durante una transacción puede llamarse a uno o múltiples SP diferentes.
Lo que MySQL no admite es crear transacciones anidadas.

Un SP es una rutina de ejecuciones en SQL (T-SQL o PL/SQL). Una transacción es un conjunto de procesos que se ejecutan en forma atómica, consistente, aislada y con resultados perdurables (ver ACID).

Pero las dos cosas son independientes del éxito o fracaso de las acciones invocadas, porque eso es una condición que el programador de SQL debe considerar al implementarla.

El éxito o fracaso de las operaciones ya tienen definidos sus resultados en los DBMS, y eso lo puedes encontrar tanto en los manuales de cada DBMS (el de MySQL, por caso), como en los del lenguaje de programación, si lo controlas desde la aplicación.
MySQL tiene varias formas de manejar esos detalles, y un post es algo largo para explicarlos, pero te resumo algunos casos:

- Los INSERT, UPDATE y DELETE generan un valor positivo (recuperable por el lenguaje usado), que representa la cantidad de registros afectados (generados, borrados o modificados).

- Los INSERT sobre tablas que usan auto incrementales afectan una variable de sesión accesible con la función de MySQL LAST_INSERT_ID(), que devuelve el valor generado (sólo si se ejecuta inmediatamente). Esta también puede ser "vista" por los lenguajes de programación.

- Los SELECT generan datos que se devuelven, pero también información en ciertas funciones (NUM_ROWS()), que pueden ser leídos.

- Los fallos de ejecución en un SP pueden generar excepciones capturables.

- Las lecturas de cursores de un SP pueden ser capturados por HANDLERs.

- Toda sentencia de MySQL fallida que genere un error, devuelve un código, un número y un mensaje de error.

Todo esos recursos se usan en programación de los SP, o bien en los lenguajes de programación, para el control y gestión de excepciones.

¿Se va entendiendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)