Buenas nochres Estimada Lista
Agradecería si alguien me puede indicar como ejecutar funcionesque retornan 
refcursos en postgres desde PHP eje:
Cualquier idea o comentario es bienbenido
Gracias de antemano por su ayuda.
Esta es la que no funciona refcursor
codigo postgres
CREATE OR REPLACE FUNCTION "danmaf"."gen_sp_obt_bancos" (pp_id_empresa integer, 
p_id_persona integer, p_id_banco integer, p_identificacion varchar, p_nombre 
varchar, p_tipo_banco varchar, p_cur_resultado "pg_catalog"."refcursor") 
RETURNS "pg_catalog"."refcursor" AS
$body$
DECLARE
 v_existe INTEGER:=0;
BEGIN

 SELECT count(1)
        into v_existe
        from "danmaf".vw_bancos vb
   where vb.id_empresa=pp_id_empresa
     and (vb.id_banco=p_id_banco or p_id_banco is null)
     and (vb.identificacion=p_identificacion or p_identificacion is null)
     and ((vb.nombre like '%'||upper(p_nombre)||'%') or p_nombre is null)
     and (vb.id_persona =p_id_persona or p_id_persona  is null)
     and (vb.tipo_banco =p_tipo_banco or p_tipo_banco  is null);

   if v_existe = 0 then
    open p_cur_resultado
        FOR select '-1' as codigo,'Banco no registrado'as descripcion;
        return  p_cur_resultado;

 else
        open p_cur_resultado
        FOR 
                SELECT *
                        from "danmaf".vw_bancos vb
                        where vb.id_empresa=pp_id_empresa
                and (vb.id_banco=p_id_banco or p_id_banco is null)
                and (vb.identificacion=p_identificacion or p_identificacion is 
null)
            and ((vb.nombre like '%'||upper(p_nombre)||'%') or p_nombre is null)
            and (vb.id_persona =p_id_persona or p_id_persona  is null)
            and (vb.tipo_banco =p_tipo_banco or p_tipo_banco  is null);

                return  p_cur_resultado;
    end if;


END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
codigo php que no se como hacer para que funcione
<?php
// Conexion, seleccion de base de datos
$conexion_bd = pg_connect("host=localhost dbname=danmaf user=danmaf 
password=danmaf")
    or die('No pudo conectarse: ' . pg_last_error());



pg_query('begin') or die('Consulta fallida: ' . pg_last_error());
pg_query('SELECT gen_sp_obt_bancos( 4, null, null, null,null, null, 
'p_cur_resultado')') or die('Consulta fallida: ' . pg_last_error());
pg_query('fetch all in "p_cur_resultado"') or die('Consulta fallida: ' . 
pg_last_error());
pg_query('commit') or die('Consulta fallida: ' . pg_last_error());



de esta forma tampoco funionó

//$resultado =pg_exec ($conexion_bd,"begin SELECT gen_sp_obt_bancos( 4, null, 
null, null,null, null, 'p_cur_resultado') fetch all in "p_cur_resultado" 
commit");


// Impresion de resultados en HTML
echo "<table>\n";
while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($linea as $valor_col) {
        echo "\t\t<td>$valor_col</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

// Liberar conjunto de resultados
pg_free_result($resultado);

// Cerrar conexion
pg_close($conexion_bd);

?>



Ejecución de una funcion set of record esta si funciona:
codigo postgres
CREATE OR REPLACE FUNCTION "danmaf"."gen_obt_estab_punto" (pp_id_empresa 
integer, pp_unidad_adm varchar, p_documento varchar, p_fecha_trx date) RETURNS 
SETOF "danmaf"."ty_gen_obt_estab_punto" AS
$body$
DECLARE

 v_rec_salida danmaf.ty_gen_obt_estab_punto;
 
BEGIN

for v_rec_salida in 
 SELECT fa.establecimiento,fa.punto,fa.autorizacion
      FROM  danmaf.gen_documento gd,danmaf.fac_autorizaciones fa
      WHERE gd.id_documento=fa.id_documento
        and gd.nombre=UPPER(p_documento)
        and gd.id_empresa=pp_id_empresa
        and fa.cod_unidad=pp_unidad_adm
        and p_fecha_trx >= fa.fecha_emision 
        and p_fecha_trx <=fa.fecha_caducidad 
   loop
 return next v_rec_salida;
   end loop;     
if v_rec_salida.establecimiento is not null THEN
  return ; 
else
for v_rec_salida in 
  select '-01' as codigo ,'No hay autorizacion' as descripcion 
   loop
 return next v_rec_salida;
   end loop; 
 return;  
end if;  

END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1000;



codigo php 
<?php
// Conexion, seleccion de base de datos
$conexion_bd = pg_connect("host=localhost dbname=danmaf user=danmaf 
password=danmaf")
    or die('No pudo conectarse: ' . pg_last_error());

// Realizar una consulta SQL

$resultado =pg_exec ($conexion_bd,"SELECT * from gen_obt_estab_punto( null, 
null, null, null)");

// Impresion de resultados en HTML
echo "<table>\n";
while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($linea as $valor_col) {
        echo "\t\t<td>$valor_col</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

// Liberar conjunto de resultados
pg_free_result($resultado);

// Cerrar conexion
pg_close($conexion_bd);

?>







_________________________________________________________________
Show them the way! Add maps and directions to your party invites. 
http://www.microsoft.com/windows/windowslive/products/events.aspx

Responder a