
Manejo del Fetch en Funcion de Consulta
Publicado por MIguel (2 intervenciones) el 26/05/2015 15:43:30
Saludos Compañeros, les explico mi duda..
Tengo una funcion de consulta en postgres como por ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
CREATE OR REPLACE FUNCTION schema_siget.fn_consultar(p_ordenamiento character varying, p_numpagina integer, p_elementosporpagina integer, p_totalregistros integer, p_cursor_numregistros refcursor, p_cursor_registros refcursor) RETURNS SETOF refcursor AS
$BODY$
DECLARE
v_sqlpaginacion varchar;
v_maxumpaginas float4;
v_sqlcondicion varchar;
v_execsql varchar;
v_execsqlcount varchar;
v_joins varchar;
BEGIN
v_sqlpaginacion := '';
v_maxumpaginas := 0;
v_sqlcondicion := '';
v_execsql := '';
v_execsqlcount := '';
IF ((p_numpagina != 0) AND (p_elementosporpagina != 0)) THEN
v_sqlpaginacion := ' LIMIT ' || p_elementosporpagina || ' OFFSET ' || ((p_numpagina-1)*p_elementosporpagina);
END IF;
IF (p_totalregistros = 0) THEN
v_execsqlcount := 'SELECT COUNT(*) FROM tbl_prueba p' || v_sqlcondicion;
OPEN p_cursor_numregistros FOR EXECUTE v_execsqlcount;
RETURN NEXT p_cursor_numregistros;
ELSE
v_maxumpaginas := ceil(p_totalregistros/p_elementosporpagina);
IF (v_maxumpaginas<p_numpagina) THEN
IF ((p_numpagina != 0) AND (p_elementosporpagina != 0)) THEN
v_sqlpaginacion := ' LIMIT ' || p_elementosporpagina || ' OFFSET ' || ((v_maxumpaginas)*p_elementosporpagina);
END IF;
END IF;
END IF;
v_execsql := 'SELECT * FROM tbl_prueba v ' || v_sqlcondicion || v_sqlpaginacion;
OPEN p_cursor_registros FOR EXECUTE v_execsql;
RETURN NEXT p_cursor_registros;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
El inconveniente es que cada vez que hago el llamado a la función desde php para realizar la paginacion de registros tengo que recargar el FETCH y la idea sería poder realizar el paginamiento sin recargar el FETCH a fin de que sea cargado en una sola oportunidad y realizar la paginacion en el mismo. Mi codigo php para hacer el llamado a la funcion es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function consultar(&$paginacion,&$consulta) {
$rs1 = null;
$rs2 = null;
$this->conexion->abrir_conexion ();
$sql = "fn_consultar(" .($paginacion->get_ordenamiento()=="null"?$paginacion->get_ordenamiento():"'".$paginacion->get_ordenamiento()."'").","
.$paginacion->get_numero_pagina().","
.$paginacion->get_elementos_pagina().","
.$paginacion->get_total_registros().",'cnr', 'cr');";
$this->conexion->ejecutar_funcion_paginada ($sql,$rs1,$rs2);
$fila = pg_fetch_assoc($rs1);
$consulta->set_numero_registros($fila['count']);
$consulta->set_registros(pg_fetch_all($rs2));
$this->conexion->cerrar_conexion ();
}
Valora esta pregunta


0