Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Replace-Funktion

Wenn Sie die vorhandene Tabelle nicht aktualisieren und nur die Daten auswählen möchten, können Sie diese etwas umständliche Abfrage verwenden.

http://sqlfiddle.com/#!4/22909/4

WITH changed_table AS
     (SELECT val1, EXTRACTVALUE (x.COLUMN_VALUE, 'e') val2new
        FROM (SELECT val1, val2 xml_str
                FROM table1),
             TABLE (XMLSEQUENCE (XMLTYPE (   '<e><e>'
                                          || REPLACE (xml_str, ',', '</e><e>')
                                          || '</e></e>'
                                         ).EXTRACT ('e/e')
                                )
                   ) x)
SELECT ct.val1, listagg(table2.val2,',') within group (order by table2.val2) val2
  FROM changed_table ct, table2 table2
 WHERE ct.val2new = table2.val1
group by ct.val1;

Ich habe den XMLTYPE verwendet, um die durch Kommas getrennten Zahlen in Zeilen zu trennen. Verbinden Sie dann die Zeilen mit der zweiten Tabelle, um die Beschreibung zu erhalten, und verwenden Sie schließlich die LISTAGG-Funktion, um eine durch Kommas getrennte Zeichenfolge zu bilden. Weiß nicht, wie effizient diese Abfrage ist. Ich stimme dem Kommentar von Mark Bannister zu.