Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction de remplacement d'Oracle

Si vous ne souhaitez pas mettre à jour la table existante et ne souhaitez sélectionner que les données, vous pouvez utiliser cette requête quelque peu laborieuse.

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;

J'ai utilisé XMLTYPE pour séparer les nombres séparés par des virgules en lignes. Ensuite, j'ai joint les lignes avec la deuxième table pour obtenir la description et j'ai finalement utilisé la fonction LISTAGG pour former une chaîne séparée par des virgules. Je ne sais pas à quel point cette requête est efficace. Je suis d'accord avec le commentaire de Mark Bannister.