[SOLUCIONADO] ejecutar procedure que devuelve multiples campos en INFORMIX

Hola!!! Finalmente logré conectar a toba con Informix. Hasta lo que he probado funciona muy bien. Hay que trabajarlo un poco, ya que no tiene implementadas muchas funciones, pero sirve y anda muy bien.
Me he conectado a la base del guarani de manera correcta y estoy generando algunos reportes y modificaciones simples desde la interfaz toba a la misma.
De todas maneras, me encontré con un problema que no he podido resolver y quisiera consultar en este foro cual es la solución que puedo encarar:
El problema es cuando utilizo un stored procedure para devolver un conjunto de datos. Informix coloca como nombres de campos en un resultado de un procedure, la etiqueta “expression”, repitiéndola tantas veces como campos tengo. Al ejecutar toba::db()->consultar(“execute procedure sp_fichaludatper(‘FCECO’, '” . $nro_inscripcion . “');”);, me devuelve un recordset con un solo campo (el último), ya que al repetirse el nombre del campo, el método “consulta” solo genera un componente en la dimensión del arreglo de campos.
La ventaja de utilizar los procedures es que ya están hechos en guarani y no debería tener que cambiarlos para no complicarme con el sistema de gestión, además de las ventajas de seguridad, velocidad, etc.

No pretendo que toba me resuelva este dilema, solo quiero saber la opinión de alguno de ustedes con respecto al camino para resolver esto. Entre los que analicé, veo que algunos pueden ser:

  • utilizar selects para las consultas y evitar los procedures
  • agregar procedures personalizados copiando la misma estructura del original, pero preparándolos para que el resultado lo devuelva en una tabla temporal que pueda ser consultada desde el toba.
  • Crear un método consulta del toba::db personalizado para que genere los nombres para los campos.

Desde ya muchas gracias.
Un abrazo a todos.

Pablo

Hola Pablo,

creo que podrias extender la fuente de datos tranquilamente (fijate que se le puede poner una subclase que la implementa) y agregar un metodo propio que en lugar de hacer un fetch asociativo, haga un fetch numerico, con lo cual deberia traerte todas las filas del resultado.

Saludos

Gracias, Richard. La verdad que no se me había ocurrido ir por ese lado. Lo veo y cualquier problema lo consulto.
Saludos.

Pablo

Richard: Finalmente lo resolví bastante más fácil. La verdad que no me había dado cuenta del segundo parámetro de toba::db()->consultar().
Ahí, directamente, puedo colocar el método del fetch, así que cuando consulto el recordset de un procedure, hago: toba::db()->consultar($sql, toba_db_fetch_num) y funciona.
La verdad que me rompí la cabeza con esto, pero todo sirve para seguir aprendiendo. Es duro este camino!!! jajaja. En fin, espero que no me vuelva a pasar lo mismo.
Gracias!!!
Un abrazo.

Pablo

Hola Pablo,

Venia a decirte exactamente esto :D, anoche mientras estaba cenando me acorde que estaba ese parametro… pero bueno se ve que me ganaste de mano.
Bien por vos, me alegro que lo hayas resuelto y que hayas mirado el codigo fuente de Toba.

Saludos