Pular para o conteúdo

Fóruns SQL e PL/SQL Retorno de registros concatenados usando Cursor Responder a: Retorno de registros concatenados usando Cursor

#145522
Avatar photoJosé Laurindo Chiappa
Moderador

    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….