› Fóruns › SQL e PL/SQL › Retorno de registros concatenados usando Cursor › Responder a: Retorno de registros concatenados usando Cursor
Só um detalhe adicional : como eu disse, melhor seria vc retornar um resultset MAS se vc REALMENTE QUISER retornar uma lista de dados separada por vírgula vc Não É Obrigado a construir a sua própria função – desde há MUITO tempo (pelo menos desde a 11g) nós JÁ TEMOS UMA FUNÇÃO NATIVA pra isso…
Veja os dados abaixo :
scott@TESTE:DESENV:SQL> select d.deptno, e.empno, e.ename
2 from dept d, emp e
3 where d.deptno = e.deptno order by 1, 3;
DEPTNO EMPNO ENAME
10 7782 CLARK
10 7839 KING
10 7934 MILLER
20 7876 ADAMS
20 7902 FORD
20 7566 JONES
20 7788 SCOTT
20 7369 SMITH
30 7499 ALLEN
30 7698 BLAKE
30 7900 JAMES
30 7654 MARTIN
30 7844 TURNER
30 7521 WARD
14 linhas selecionadas.
scott@TESTE:DESENV:SQL>
==> Digamos que em cima do exemplo acima, eu quero ter para CADA DEPARTAMENTO a lista de empregados dentro dele – como NÂO quero construir a minha própria função que retorna os dados agrupados, eu VOU usar a built-in :
scott@TESTE:DESENV:SQL> ed
Gravou file afiedt.buf
1 select d.deptno, 'Empregados=' || listagg(e.ename, ',') empregados_do_depto
2 from dept d, emp e
3 where d.deptno = e.deptno
4 group by d.deptno
5* order by 1
scott@TESTE:DESENV:SQL> /
DEPTNO EMPREGADOS_DO_DEPTO
10 Empregados=CLARK,KING,MILLER
20 Empregados=SMITH,JONES,SCOTT,ADAMS,FORD
30 Empregados=ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES
3 linhas selecionadas.
scott@TESTE:DESENV:SQL>
certo ?? Eu ** IMAGINO ** que é algo do tipo que vc queria quando escreveu essa sua função…. OBVIAMENTE, há um LIMITE de comprimento na string que uma função built-in pode retornar (4000 bytes geralmente, MAS na versão 12c do banco pode ir até 32 kb SE o banco estiver configurado pra isso) , mas fica a Sugestão….