PostgreSQL - Manejo del Fetch en Funcion de Consulta

   
Vista:
Imágen de perfil de MIguel

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder