Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função Oracle:Replicar wm_concat


Você recebe uma mensagem de erro quando usa wm_concat? Ao contrário de funções como to_char, ela é de propriedade de wmsys e talvez seja necessário usar wmsys.wm_concat para usá-la. (a menos que você crie os sinônimos necessários, é claro).

Agora para a pergunta real,

Essa técnica é chamada de agregação de strings.

Você pode encontrar muitas outras alternativas aqui.

http://www.oracle-base.com/articles/ 10g/StringAggregationTechniques.php Para outros métodos, pesquise "stragg" em http://asktom.oracle.com Outro link útil:http://www.orafaq.com/node/2290

Este é provavelmente o mais usado. Muitas equipes escrevem suas próprias funções personalizadas que mais ou menos fazem o mesmo.
CREATE OR REPLACE FUNCTION get_employees (p_deptno  in  emp.deptno%TYPE)
  RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN
  FOR cur_rec IN (SELECT ename FROM emp WHERE deptno = p_deptno) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;
  RETURN LTRIM(l_text, ',');
END;
/
SHOW ERRORS

enquanto esta solução funciona para varchar2 e number, a melhor solução genérica pode ser construída usando a interface Oracle ODCIAggregate.

http://download-west .oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462

A implementação para o mesmo está no primeiro link acima em www.oracle-base.com