EL PROCEDIMIENTO QUE TENGO HASTA AHORA ES ASI
    
Código MySQL:
Ver originalDECLARE detalle_cur CURSOR FOR 
SELECT detalle.id_cabecera
, detalle.codigo_cuenta
, detalle.sucursal
, detalle.debito
, detalle.credito
, detalle.tercero
, detalle.centrocosto 
FROM " . $tablaMes . " as detalle 
HAVING detalle.id_cabecera 
= " . $idComprobante . "; OPEN detalle_cur;
    FETCH  detalle_cur 
INTO v_id_cabecera
, v_codigo_cuenta
, v_sucursal
, v_debito
, v_credito
, v_tercero
, v_centro_costo
;    SET tmp_continuar 
= continuar
;      SELECT v_codigo_cuenta
, v_sucursal
, v_debito
, v_credito
, v_tercero
, v_centro_costo
;     
        loop_interno: LOOP
           SELECT codigo
,movimiento
,terceros
,mayor
,centrocosto 
FROM puc 
WHERE codigo 
= v_codigo_cuenta 
            INTO puc_cuenta
, puc_movimiento
, puc_terceros
, puc_mayor
, puc_centro_costo
;            SELECT puc_cuenta
, puc_movimiento
, puc_terceros
, puc_mayor
, puc_centro_costo
;                         SELECT id 
FROM ".$tablaSaldos." WHERE cuenta 
= v_codigo_cuenta 
and tercero 
= v_tercero 
and sucursal 
= v_sucursal 
INTO v_id_saldo
;                             INSERT INTO ".$tablaSaldos." (cuenta
,tercero
,sucursal
,".$campoDebito.",".$campoCredito.") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`,v_debito
,v_credito
);                             UPDATE ".$tablaSaldos." SET ".$campoDebito." = ".$campoDebito.$signo." v_debito
, ".$campoCredito." = ".$campoCredito.$signo." v_credito 
WHERE id 
= v_id_saldo
;                     loop_centro: LOOP
                       
                       SELECT id_padre 
FROM centros_costo 
WHERE id_centro_costo 
= v_centro_costo 
INTO padre_centro_costo
;  
                        SELECT id 
FROM ".$tablaSaldos." WHERE cuenta 
= v_codigo_cuenta 
and tercero 
= v_tercero 
and sucursal 
= v_sucursal 
INTO v_id_saldo
;                             INSERT INTO " . $tablaSaldos . " (cuenta
,tercero
,sucursal
,centroCosto
," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`,v_debito
,v_credito
);                             UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito
, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito 
WHERE id 
= v_id_saldo
;                         
                       SET v_centro_costo 
= padre_centro_costo
;                           LEAVE loop_centro;    
                       
                            
                SELECT id 
FROM ".$tablaSaldos." WHERE cuenta 
= v_codigo_cuenta 
and tercero 
= v_tercero 
and sucursal 
= v_sucursal 
INTO v_id_saldo
;                     INSERT INTO " . $tablaSaldos . " (cuenta
,tercero
,sucursal
,centroCosto
," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`,v_debito
,v_credito
);                     UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito
, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito 
WHERE id 
= v_id_saldo
;            SET v_codigo_cuenta 
= puc_mayor
;               LEAVE loop_interno;   
    SET continuar
= tmp_continuar
; CLOSE detalle_cur;
  
El diseñador de la base de datos crea una tabla que se encarga de guardar la mayorización de proceso contable por año, por eso lo del procedimiento que crea tablas diferentes nombres estructura igual. 
La idea del procedimiento es que si yo ingreso una cuenta con un centro de costo 
11050502 con un centro de costo 102030
11100503 sin centro de costo 
en mi base de datos en mi tabla me debe guardar el padre de la cuenta y del centro de costo, pero si mi cuenta no tiene centro de costo solo ingrese el padre de la cuenta con el centro de costo null 
Lo que debe hacer........... 
CUENTA CENTRO_COSTO 
11100503 NULL
111005 NULL
1110 NULL
11 NULL
1 NULL
11050502 102030
11050502 102000
11050502 100000
11050502 
110505 102030 
110505 102000
110505 100000
110505  
1105 102030
1105 102000
1105 100000
1105  
11 102030
11 102000
11 100000
11  
1 102030
1 102000
1 100000
1 
eso es lo que me debe hacer el procedimiento, pero el procedimiento que hasta el momento tengo solo me guarda  
Lo que hace ............. 
CUENTA CENTRO COSTO 
11100503 NULL
111005 NULL
1110 NULL
11 NULL
1 NULL
11050502 102030
11050502 102000
11050502 100000
11050502 
el procedimiento solo se ejecuta en una unica tabla, llamada saldos_contables_[año actual] la estructura de esta tabla es  
id	int(10)
cuenta	varchar(20)
sucursal	varchar(4)	
tercero	varchar(20)
centroCosto varchar(6)
db_06	double(15,2)
cr_06	double(15,2)	 
siempre va ser la misma, lo que varia son los codigos de cuenta y los centros de costo 
SELECT codigo, movimiento, terceros,mayor, centrocosto ROM puc WHERE codigo =v_codigo_cuenta INTO puc_cuenta, puc_movimiento, puc_terceros, puc_mayor, puc_centro_costo;
SELECT puc_cuenta, puc_movimiento, puc_terceros, puc_mayor, puc_centro_costo; 
esta consulta lo unico que hace es consultarme el codigo contable mayor al que esta en ese momento cargada es decir esa consulta me muestra el mayor de 11050502, y solo se ejecuta en una parte que es al principio. 
El problema que yo se que es y que veo es que en el procedimiento tengo 2 loop
uno para el codigo_contable (loop_interno) muestra el mayor  
11050502
110505
1105 .. 
pero dentro de ese loo_interno hay otro que se encargar de mostrar el padre del centro de costo (loop_centro) 
102030
102000
100000 
el problema es que cuando llega a ejecutar el loop_centro funciona la primera vez    
Código MySQL:
Ver originalloop_centro: LOOP        
  SELECT id 
FROM ".$tablaSaldos." WHERE cuenta 
= v_codigo_cuenta 
and tercero 
= v_tercero 
and centroCosto 
= v_centro_costo 
INTO v_id_saldo
; //en este momento me trae el codigo 
11050502 y el centro_costo 
=102030        INSERT INTO " . $tablaSaldos . " (cuenta
,tercero
,sucursal
,centroCosto
," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`, v_debito
, v_credito
); // inserta en la tabla saldos_contables_2015 ese registro 
11050502 102030       UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito
, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito 
WHERE id 
= v_id_saldo
;   
  SELECT id_padre 
FROM centros_costo 
WHERE id_centro_costo 
= v_centro_costo 
INTO padre_centro_costo
; // consulta el padre del centro de costo 
102030   
   SET v_centro_costo 
= padre_centro_costo
; //aqui le esta a la variable v_centro_costo asignando 
102000     IF  v_centro_costo 
IS NULL THEN    // como el valor de  v_centro_costo 
no es 
NULL  no se me sale del loop 
y lo sigue ejecutando 
       LEAVE loop_centro;     
  
como en el ultimo centro de costo es 100000 y el padre es NULL ahi cierra el loop_centro y lo saca y ahi detiene todo el proceso algo que no deberia hacer, por que cuando me salga de ese loop_centro deberia seguir ejecutando el loop_interno para que me siga ejecutando la cuenta 
o por lo menos eso es lo que deberia estar haciendo. que cuando termina de ejecutar loop_centro debe continuar la ejecucion de loop_interno hasta que este tambien se cierre