Como mantener una Transaccion entre Stored Procedures es Posible?
Saludos a Todos,
Me encuentro realizando una aplicación la cual usa tablas Innodb, esta aplicacion es para el manejo de arboles, asi que estoy usando Stored Procedure para algunas funcionalidades como lo son el de agregar nuevos nodos al Arbol, por lo hago uso de Stored Procedures Recursivos para recorrer el arbol y obtener ciertos datos,
Hasta aqui no hay ningun problema hace poco empece a hacer las validaciones y me di cuenta que las transacciones se pierden si el Stored Procedure hace una llamada a otro Stored Procedure, aunque el otro Stored Procedure no inicie internamente ninguna otra transaccion;
Mi idea se basa en usar otros Stored Procedures dentro de un principal para obtener los datos que necesite y valida si algo fallo a la hora de insertar un nodo se cancele todas las inserciones realizadas pero esto no sucede, ignora por completo el rollback que se hace [Las llamadas son necesarias por que los otros Stored Procedures son recursivos], aqui les pongo parte del código :
proc3:
BEGIN
#---------------------------------------
#.. Algunas declaraciones por aca arriba
#---------------------------------------
SET AUTOCOMMIT = 0;
START TRANSACTION;
#----------------------------------
# Inserto el primer nodo en el arbol
#----------------------------------
INSERT INTO RELATIONS (PARENT, CHILD, MODEL) VALUES ( 4399 , v_SOURCE_NODE, v_DEST_MODEL);
IF error THEN
SET success = FALSE;
ROLLBACK;
LEAVE proc3;
END IF;
....
#-------------------------
# Llamada recursiva para insertar el resto de los nodos .....
#-------------------------
....
#-------------------------
# Este Stored Procedure Me indica si se realiza un Loop con las insercciones
#-------------------------
CALL loop_exist( LAST_PARENT , 25, FALSE, v_LOOP);
IF v_LOOP = TRUE THEN
SET v_MSG_CODE = 4;
SET success = FALSE;
ROLLBACK; # CADA QUE LLEGA AQUI NO REGRESA LOS CAMBIOS.
LEAVE proc3;
END IF;
COMMIT;
END
Alguna sugerencia de que podria hacer para que el RollBack haga lo que debe hacer o una forma que soporte llamadas entre Stored Procedure que pueda emular un rollback en casao de un error?
Gracias