PHP - Extraer multiples resultados de Procedimiento almancenado

 
Vista:
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 16:36:25
Buen dia comunidad

Estoy ejecutando un procedimiento almacenado desde MSSQL con odbc con php.. hasta ahi muy bien.

Pero el resultado trae tres bloques de resultados. pues este ejecuta tres consultas al tiempo.

como hago para almacenar en arrays los diferentes bloques ya que con odbc_fetch_array solo me muestra la primera fila del primer bloque de datos.


muchas gracias por su colaboración.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Extraer multiples resultados de Procedimiento almancenado

Publicado por kip (877 intervenciones) el 29/12/2016 17:27:21
Hola, puedes colocar el contenido del procedimiento ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 17:33:55
Gracias por tu pronta respuesta.... pero no se tiene acceso al contenido programado del sp.

solo ejecuto esta linea en el sql y me ejecuta lo que necesito

exec sp_diario_venta 0,'',4,'456',0,'20161201','20161229',1,NULL,1,','',1,1

esto es lo que me trae. los tres bloques.... segun lei en la documentacion....crea tabla temporales con los datos extraido y luego ejecuta la consulta.

resultados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Extraer multiples resultados de Procedimiento almancenado

Publicado por kip (877 intervenciones) el 29/12/2016 17:55:35
Entiendo, coloca el codigo PHP que tienes ahora para verlo y darte una idea de como podrias hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 18:04:41
$sp=odbc_exec($conn,"exec sp_rpt_libro_diario_venta 0,'',4,'456',0,'20161201','20161229',1,NULL,1,'','',1,1");
$datos=odbc_fetch_array($sp);

pero solo me muestra la primera fila del primer bloque... y necesito tomar en array cada uno de los bloques para armar unas tablas temporales. consulto en la guia de php y con el odbc_result_next efectivamente sale en true porque hay dos array mas.

ya he consultado con otras funciones pero me pasa lo mismo....gracias por tu colaboracion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Extraer multiples resultados de Procedimiento almancenado

Publicado por kip (877 intervenciones) el 29/12/2016 19:41:11
Prueba con esto:

1
2
3
4
5
6
7
8
9
10
11
12
$sql = "exec sp_rpt_libro_diario_venta 0,'',4,'456',0,'20161201','20161229',1,NULL,1,'','',1,1";
$sp = odbc_exec($conn, $sql);
$datos_all = array();
while (TRUE) {
  $datos = odbc_fetch_array($sp);
  $datos_all[] = $datos;
  echo 'DATOS INDIVIDUALES<br>';
  print_r($datos);
  if ( ! odbc_next_result($sp)) break;
}
echo 'TODOS LOS DATOS<br>';
print_r($datos_all);

Imprimo cada resultado y luego imprimo todos los resultados que almacene en $datos_all, no lo he probado, me cuentas si te lanza algun error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 20:21:25
Gracias kpl por tu ayuda. te cuento que funciona pero solo trae el primer registro de cada bloque. lo que me pasaba con odbc_fetch_array. pero vamos por buen camino. gracias totales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Extraer multiples resultados de Procedimiento almancenado

Publicado por kip (877 intervenciones) el 29/12/2016 20:34:26
Solo debes aplicar un while en cada fetch para obtener todos los registros, algo asi:

1
2
3
while ($datos = odbc_fetch_array($sp)) {
     $datos_all['bloque_resultados'][] = $datos;
}

Asi por ejemplo almacenarias el array de resultados de cada consulta en cada indice bloque_resultados de $datos_all
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 20:47:57
lo probare...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 29/12/2016 20:52:53
lo del ciclo lo entendi.. pero cual seria el bloque.... como lo identifico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Extraer multiples resultados de Procedimiento almancenado

Publicado por kip (877 intervenciones) el 30/12/2016 06:07:02
Prueba con esto a ver si lo entiendes mejor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sql = "exec sp_rpt_libro_diario_venta 0,'',4,'456',0,'20161201','20161229',1,NULL,1,'','',1,1";
$sp = odbc_exec($conn, $sql);
$datos_all = array();
$sigte = 1;
while (TRUE) {
  while ($datos = odbc_fetch_array($sp)) {
    $datos_all["BLOQUE_RESULTADOS_{$sigte}"][] = $datos;
  }
  if ( ! odbc_next_result($sp)) break;
  $sigte++;
}
echo 'TODOS LOS DATOS<br>';
foreach ($datos_all as $key => $bloque_resultados) {
  echo '<br>'.$key.'<br>';
  foreach ($bloque_resultados as $resultado) {
    print_r($resultado);
  }
}

Almaceno y luego muestro todos los resultados colocando el nombre de cada bloque de resultado.

Nos avisas si te lanza algun error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Extraer multiples resultados de Procedimiento almancenado

Publicado por Gustavo (7 intervenciones) el 02/01/2017 16:44:44
Hola kpl. disculpa la tardanza....ya lo probe.. y por cada bloque.. me trae la primera fila.

TODOS LOS DATOS

BLOQUE_RESULTADOS_1
Array ( [f2_co] => 456 [f2_tipo_docto] => FAT [365] => 365 [366] => 366 [f2_cantidad] => 2)
BLOQUE_RESULTADOS_2
Array ( [f3_departamento] => FAT [f3_descripcion] => FACTURA [tipo] => Gravado [f3_tarifa] => 16.0000)
BLOQUE_RESULTADOS_3
Array ( [f4_descripcion] => EFECTIVO [f4_cantidad] => 32 [valor] => 11830627.0000 [f4_fecha] => 2016-11-28)

el ciclo interno en cada uno de los bloques no se ejecuta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar