From: | ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com> |
---|---|
To: | lista ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Ejecutar funciones en PHP que retornan Refcursor desde Postgres |
Date: | 2009-06-25 02:56:07 |
Message-ID: | SNT116-W439FFE95537346C5621250DF340@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Nicolás Domínguez Florit | 2009-06-25 16:15:34 | Cambios volátiles por usuario... |
Previous Message | José Fermín Francisco Ferreras | 2009-06-25 02:43:05 | RE: archivo .pgpass |