Postgres Function y Cursores



El Gran Elefante.

Bueno la pregunta es como programar una buena function en postgres y mas aun como obtener los datos. En este caso estoy evaluando function y cursores. Veamos como funciona esto.

1.- La tabla y código de la function.

CREATE TABLE public.parametros (
                codigo VARCHAR NOT NULL,
                valor VARCHAR NOT NULL,
                descripcion VARCHAR NOT NULL,
                dominio VARCHAR NOT NULL,
                CONSTRAINT parametros_pk PRIMARY KEY (codigo)
)

2.- La cabecera de la function.
CREATE OR REPLACE FUNCTION public.get_lst_dominio(
    IN p_dominio character varying,
    IN p_count integer DEFAULT 0,
    OUT p_cod_err integer,
    OUT p_desc_err character varying,
    OUT ref refcursor)

Aquí tengamos presente que los parámetros de entrada están con un IN/OUT

2.- Código Java.
Muy importante que al utilizar cursores en postgresql el autocommit debe estar deshabilitado.

           getConexion().setAutoCommit(false);
           // TODO : Con el Manejo de cursores es importante manejar el auto commit en falso.
            String sql = "{ call public.get_lst_dominio(?, ?, ?, ?, ?) }";
            CallableStatement pre = getConexion().prepareCall(sql);
            pre.setString(1, dominio);
            pre.setInt(2, 0);
            pre.registerOutParameter(3, java.sql.Types.INTEGER);
            pre.registerOutParameter(4, java.sql.Types.VARCHAR);
            pre.registerOutParameter(5, java.sql.Types.OTHER);
           
            pre.execute();
           
            ResultSet resSet = (ResultSet) pre.getObject(5);


Fuentes en GIT : https://github.com/FrankSeguel/Postgresql