tendrías que hacer un procedimiento con un parámetro de salida de tipo puntero para luego poder recorrerlo. Yo trabajo con procedimientos que llamo desde php, y hago algo así:
Código PHP:
$sql = "BEGIN test( :entrada1, :p_entrada2 , :salida); END;";
$conex = Conexion::getInstancia(USUARIO2, PASSWORD2, BASE2, SERVIDOR2);
$stid = oci_parse($conex, $sql);
oci_bind_by_name($stid, ':p_entrada1', $usuario, -1, SQLT_CHR);
oci_bind_by_name($stid, ':p_entrada2', $edad, -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);
Y en oracle..
Código:
CREATE OR REPLACE PACKAGE tipos as
type cursor_type is ref cursor;
end;
/
PROCEDURE test(p_usuario in varchar, p_edad in number, p_recordset out tipos.cursor_type) as
begin
open p_recordset for
select * from tabla_test where usuario=p_usuario and edad=p_edad;
end test;
/
Para finalmente recorrerlo fila a fila de esta manera
Código PHP:
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
echo "$row</br>";
}
Espero que te sirva de alguna manera