Oracle
 sql >> Database >  >> RDS >> Oracle

aggiungi una virgola (,) in Oracle

Oracle non ha una funzione come GROUP_CONCAT di MySQL, che è esattamente la funzionalità che stai chiedendo. In questa pagina sono fornite varie opzioni per tale aggregazione di stringhe - uno consiste nell'utilizzare una funzione personalizzata:

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;

Quindi lo useresti come:

SELECT get_subjectkey(?) AS subject_key
  FROM DUAL

...sostituendo il "?" con il valore della chiave primaria.

In precedenza

Supponendo che tu voglia solo aggiungere una virgola alla fine del valore della colonna, usa:

SELECT DISTINCT TO_CHAR(subject_key) || ','
  FROM MYTABLE

Il doppio tubo -- "||" -- è il mezzo Oracle [,PostgreSQL e ora ANSI] per concatenare stringhe in SQL. Ho usato TO_CHAR per convertire esplicitamente il tipo di dati, ma potresti usare:

SELECT DISTINCT subject_key || ','
  FROM MYTABLE

...se non è necessario.