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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral