Me presento, me llamo Fernando, soy nuevo en el foro. Vi muchísimos post que hicieron aquí y muchos me
ayudaron, pero ésta es la primera vez que yo hago una pregunta.
Resulta que en mi trabajo estoy haciendo consultas a Oracle con php para generar un excel, pero siempre me
omite el primer registro, al principio pense que los titulos lo estaban tapando pero debugeando pareciera que
directamente no tengo ese primer registro.
Si realizo la consulta directamente con un cliente como el toad me devuelve 36 rows, mientras que el mismo
procedimiento a traves de mi aplicacion php me devuelve solo 35 suprimiendome el primero.
Código PHP:
GenerarExcel::prestadoresTerapiaRadiante('name.xls', 'UP3069986282300', '05/2011',);
Código PHP:
static public function prestadoresTerapiaRadiante($nombre, $usuario, $periodos, $debug = false) {
self::$_nombre = $nombre;
$usuario = implode(',', self::formatearUsuarios($usuario));
$periodos = self::formatearPeriodo($periodos);
$sql = "BEGIN prestadoresTerapiaRadiante(:p_usuario, :p_periodos , :salida); END;";
$conex = Conexion::getInstancia(USUARIO2, PASSWORD2, BASE2, SERVIDOR2);
$stid = oci_parse($conex, $sql);
oci_bind_by_name($stid, ':p_usuario', $usuario, -1, SQLT_CHR);
oci_bind_array_by_name($stid, ':p_periodos', $periodos, count($periodos), -1, SQLT_INT);
$salida = oci_new_cursor($conex);
oci_bind_by_name($stid, ":salida", $salida, -1, OCI_B_CURSOR);
oci_execute($stid);
oci_execute($salida);
return self::generar($salida, $debug);
}
Código PHP:
static private function generar($stid, $debug) {
$rows = oci_fetch($stid);
if ($rows && !$debug) {
$filename = self::$_nombre;
$workbook = new Spreadsheet_Excel_Writer();
$workbook->send($filename);
$workbook->setVersion(8);
$workbook->setTempDir(self::$_temporal);
$worksheet = & $workbook->addWorksheet('Items');
$worksheet->setInputEncoding('UTF-8');
$worksheet->setMargins(0.25);
$worksheet->centerHorizontally(1);
$worksheet->activate();
$format_header = & $workbook->addFormat();
$format_header->setBold();
$format_header->setSize(12);
$format_row = & $workbook->addFormat();
$format_row->setSize(12);
$i = 0;
$j = 1;
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_LOBS)) {
foreach ($row as $key => $valor) {
if ($j == 1) {
$worksheet->write(0, $i, $key, $format_header);
}
//$worksheet->writeString($j, $i, $valor, $format_row);
$i++;
}
$i = 0;
$j++;
}
$workbook->close();
exit;
}
return $rows;
}
Código:
Bueno, gracias y Saludos CREATE OR REPLACE PROCEDURE NMP_PAMI_LIQUIDACION.prestadoresTerapiaRadiante( p_usuario IN varchar2, p_periodos IN Types.arraynumber, p_recordset OUT Types.cursor_type) AS BEGIN FOR i IN 1 .. p_periodos.COUNT LOOP insert into tmp_numeros values ( p_periodos(i) ); END LOOP; COMMIT; OPEN p_recordset FOR select t.c_usuario, t.c_anio, t.c_mes, t.n_instalacion, r.*, s.* from nmp_pami.nmt_proceso_calculo_archivos t inner join (select pca.c_anio, pca.c_mes, pca.c_usuario, pca.n_instalacion, max(pca.c_file_upload) c_file_upload, c_mr_tcalc from nmp_pami.nmt_proceso_calculo_archivos pca where pca.marca_a_procesar = 1 and (pca.c_anio * 100 + pca.c_mes) in (select numero from tmp_numeros) and pca.c_mr_tcalc = 'CAP' and pca.c_usuario = p_usuario group by pca.c_anio, pca.c_mes, pca.c_usuario, pca.n_instalacion, c_mr_tcalc) j on t.c_file_upload = j.c_file_upload and t.c_mr_tcalc = j.c_mr_tcalc inner join nmp_pami.nmt_prestacion_ti r on r.c_file = t.c_file_upload inner join nmp_pami.nmt_practica_prest_ti s on r.c_file = s.c_file and r.n_prestacion = s.n_prestacion and s.c_modulo_pami in (30,31,32,33) where exists (select a.n_beneficio,a.c_grado_paren, d.c_usuario, sum(q_practica) from nmp_pami.nmt_prestacion_ti a inner join nmp_pami.nmt_practica_prest_ti c on a.c_file = c.c_file and a.n_prestacion = c.n_prestacion and c.c_modulo_pami in (30,31,32,33) inner join nmp_pami.nmt_proceso_calculo_archivos d on a.c_file = d.c_file_upload and d.marca_a_procesar = 1 and (d.c_anio * 100 + d.c_mes) in (select numero from tmp_numeros) and d.c_mr_tcalc = 'CAP' where t.c_usuario = d.c_usuario and r.n_beneficio = a.n_beneficio and r.c_grado_paren = a.c_grado_paren group by a.n_beneficio,a.c_grado_paren, d.c_usuario having sum(q_practica) >1) order by t.c_usuario,r.n_beneficio,r.c_grado_paren,s.c_modulo_pami,r.c_file,s.c_practica; delete tmp_numeros; commit; END prestadoresTerapiaRadiante; /