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

adicionar uma vírgula (,) no Oracle


O Oracle não tem uma função como GROUP_CONCAT do MySQL, que é exatamente a funcionalidade que você está pedindo. Várias opções para tal agregação de strings são fornecidas nesta página - uma é usar uma função personalizada:
CREATE OR REPLACE FUNCTION get_subjectkey (IN_PK IN MYTABLE.PRIMARY_KEY%TYPE)
RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN

  FOR cur_rec IN (SELECT subject_key 
                    FROM MYTABLE 
                   WHERE primary_key = IN_PK) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;

  RETURN LTRIM(l_text, ',');
END;

Então você usaria como:
SELECT get_subjectkey(?) AS subject_key
  FROM DUAL

...substituindo o "?" com o valor da chave primária.

Anteriormente


Supondo que você queira apenas adicionar uma vírgula ao final do valor da coluna, use:
SELECT DISTINCT TO_CHAR(subject_key) || ','
  FROM MYTABLE

O tubo duplo -- "||" -- é o meio Oracle [,PostgreSQL e agora ANSI] de concatenar strings em SQL. Eu usei TO_CHAR para converter explicitamente o tipo de dados, mas você pode usar:
SELECT DISTINCT subject_key || ','
  FROM MYTABLE

... se isso não for necessário.