sql >> Database >  >> RDS >> Oracle

voeg een komma (,) toe in Oracle

Oracle heeft geen functie zoals MySQL's GROUP_CONCAT, wat precies de functionaliteit is waar je om vraagt. Verschillende opties voor dergelijke stringaggregatie vindt u op deze pagina - een daarvan is om een ​​aangepaste functie te gebruiken:

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;

Dan zou je het als volgt gebruiken:

SELECT get_subjectkey(?) AS subject_key
  FROM DUAL

... het vervangen van de "?" met de waarde van de primaire sleutel.

Eerder

Ervan uitgaande dat u alleen een komma aan het einde van de kolomwaarde wilt toevoegen, gebruikt u:

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

De dubbele pijp -- "||" -- is het Oracle [, PostgreSQL en nu ANSI] middel om strings in SQL samen te voegen. Ik heb TO_CHAR gebruikt om het gegevenstype expliciet te converteren, maar je zou kunnen gebruiken:

SELECT DISTINCT subject_key || ','
  FROM MYTABLE

...als dat niet nodig is.



  1. Normale beeldopslag of mySQL-blob?

  2. SQL Server sp_msforeachable gebruik om alleen die tabellen te selecteren die aan een bepaalde voorwaarde voldoen

  3. Dialect moet expliciet worden opgegeven vanaf v4.0.0

  4. Hoe integreer je Apache Spark met MySQL voor het lezen van databasetabellen als een spark-dataframe?