En esta oportunidad veremos como desde ejecutar una sola función, se puede obtener 2 set de datos para ser procesados por su software.


Ejemplo 1: Usando Tablas Temporales

create or replace function lee1() returns integer
AS $$
    BEGIN
        DROP TABLE IF EXISTS tmp1;
        DROP TABLE IF EXISTS tmp2;

        CREATE TEMP TABLE tmp1 AS SELECT par_serial FROM docs_paragraph;
        CREATE TEMP TABLE tmp2 AS SELECT par_integrity FROM docs_paragraph;

        RETURN 1;
    END;
$$ LANGUAGE plpgsql;

Ejemplo 2: Devolviendo una Cadena de Texto para ser Parseada

create or replace function lee2() returns TEXT
AS $$
    DECLARE
        retorno TEXT;
        fila    RECORD;
    BEGIN
        retorno := '[';

        FOR fila IN SELECT par_serial FROM docs_paragraph limit 10
        LOOP
            retorno := retorno || fila.par_serial::text || ',';
        END LOOP;
        retorno := substring(retorno,1,length(retorno)-1);
        retorno := retorno || '],[';

        FOR fila IN SELECT par_integrity FROM docs_paragraph limit 10
        LOOP
            retorno := retorno || '"' || fila.par_integrity || '", ';
        END LOOP;
        retorno := substring(retorno,1,length(retorno)-1);
        retorno := retorno || ']';

        RETURN retorno;
    END;
$$ LANGUAGE plpgsql;

Ejemplo 3: Devolviendo una trama JSON

create or replace function lee3() returns JSON
AS $$
    DECLARE
        retorno JSON;
        cadena  TEXT;
        fila    RECORD;
    BEGIN
        cadena:= '{"resultado":[';
        cadena:=  cadena || '{"t1":[';

        FOR fila IN SELECT par_integrity, par_serial FROM docs_paragraph limit 10
        LOOP
            cadena := cadena || '{"integrity":"' || fila.par_integrity || '", "serial":' || fila.par_serial::text ||'},';
        END LOOP;
        cadena := substring(cadena,1,length(cadena)-1);
        cadena := cadena || ']}'; --cierro tabla t1


        cadena := cadena || ',{"t2":[';

        FOR fila IN SELECT par_integrity, par_serial FROM docs_paragraph order by par_serial desc limit 10
        LOOP
            cadena := cadena || '{"integrity":"' || fila.par_integrity || '", "serial":' || fila.par_serial::text ||'},';
        END LOOP;
        cadena := substring(cadena,1,length(cadena)-1);
        cadena := cadena || ']}'; -- cierro tabla t2
        cadena := cadena || ']}';  --cierro resultado

        --raise notice '%', cadena;

        retorno := cadena::json;

        RETURN retorno;
    END;
$$ LANGUAGE plpgsql;

Impactos: 390

Categories:

Comments are closed