Archive for the ‘PostgreSQL’ Category

Ejemplo para llamar una función pg/psql

 

Este es un ejemplo de como llamar una funcion pg/sql que retorna un valor, y leer el valor dentro de un jsp. En este caso mi función devuelve un valor de tipo boolean.
Esta es la funcion en postgres
CREATE OR REPLACE FUNCTION agregar(double precision, character varying, integer, character varying, 
character varying, character varying)
  RETURNS boolean AS
$BODY$
declare
 id ALIAS FOR $3;
 establecidas int :=0;
 agregadas int :=0;
 inicio date :=TO_DATE($5,'YYYY/MM/DD');
 termino date :=TO_DATE($6,'YYYY/MM/DD');
 nulo date:= null;
 mensaje boolean := false;
BEGIN
 select into establecidas from proyectos where id=id;
 agregadas :=  count(id) from etapas where id=id;
 IF agregadas < establecidas THEN
insert into etapas (monto, observaciones, id_proy, nombre,
 fch_inicio, fch_termino, prorroga) values ($1,$2,$3,$4,inicio,termino,nulo);
mensaje:=true;
 END IF;
 RETURN mensaje;
END;
$BODY$
  LANGUAGE 'plpgsql'

Aquí mandamos llamar la función y capturamos el valor

CallableStatement proc = conn.prepareCall("{ ?=call agregar( ?,?,?,?,?,? ) }");
proc.setFloat(2,monto);
proc.setString(3,observaciones);
proc.setInt(4,p);
proc.setString(5,nombre);
proc.setString(6,fch_inicio);
proc.setString(7,fch_termino);
proc.registerOutParameter( 1, Types.BOOLEAN );
proc.execute();
if(proc.getBoolean(1))
response.sendRedirect("lista.jsp?clave="+p);
else
out.println("<h3 id='colora'><center>No se pude agregar,</center></h3>");
proc.close();

En algunas maquinas puede generar un error la jsp en el tipo de dato que se registra, esto se soluciona registrando el tipo de dato Types.BOOLEAN por Types.BIT y ya no habrá problema alguno, y para obtener el valor de retorno podemos seguir haciendo uso del metodo getBoolean(1) ya que la documentacion dice esto: Recupera el valor de un parámetro JDBC bit o booleano como un booleano en el lenguaje de programación Java.