Olá pessoal

 

Alguém poderia me ajudar com uma questão por Gentileza.

Tem como abrir um cursor a partir de um retorno de cursor retornado por um
função ?

 

Vou exemplificar da seguinte forma: este exemplo abaixo funciona
corretamente:

 

CREATE TABLE table_1 (col text); INSERT INTO table_1 VALUES ('123');

CREATE TABLE table_2 (col text); INSERT INTO table_2 VALUES ('456');  

 

CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$

BEGIN

    OPEN $1 FOR SELECT * FROM table_1;

    RETURN NEXT $1;

    OPEN $2 FOR SELECT * FROM table_2;

    RETURN NEXT $2;

END;

$$ LANGUAGE plpgsql;

 

SELECT * FROM myfunc('a', 'b');

 

FETCH ALL IN a;   /* este retornara 123 */          

FETCH ALL IN b;  /* este retornara 456 */

 

Não estou conseguindo quando uso da seguinte forma:

CREATE OR REPLACE FUNCTION funcao1(refcursor) RETURNS refcursor AS $$

BEGIN

    OPEN $1 FOR SELECT * FROM table_1;

    RETURN $1;

END;

$$ LANGUAGE plpgsql;

 

CREATE OR REPLACE FUNCTION funcao2(refcursor) RETURNS refcursor AS $$

BEGIN

    OPEN $1 FOR SELECT * FROM table_2;

    RETURN $1;

END;

$$ LANGUAGE plpgsql;      

                

CREATE OR REPLACE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF
refcursor AS $$

BEGIN

    

    OPEN $1 FOR SELECT * FROM funcao1('aux1');

    RETURN NEXT $1;

    OPEN $2 FOR SELECT * FROM funcao2('aux2');

    RETURN NEXT $2;

END;

$$ LANGUAGE plpgsql;

 

SELECT * FROM myfunc('a', 'b');

 

FETCH ALL IN a;   /* este retornara aux1 */        

FETCH ALL IN b;  /* este retornara aux2  */

 

A QUESTÃO É:  COMO FAZER neste exemplo acima PARA O ‘FETCH ALL IN  a’
RETORNAR ‘123’  E  ‘FETCH ALL IN b’ RETORNAR ‘456’

 

Agradeço desde já e desejo um bom ano a todos!

 

Jairo de Melo

 

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a