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

Função de substituição do Oracle


Se você não deseja atualizar a tabela existente e deseja apenas selecionar os dados, pode usar essa consulta um tanto trabalhosa.

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;

Eu usei o XMLTYPE para separar os números separados por vírgulas em linhas. Em seguida, juntou as linhas com a segunda tabela para obter a descrição e, finalmente, usou a função LISTAGG para formar uma string separada por vírgula. Não sei o quão eficiente é essa consulta. Concordo com o comentário de Mark Bannister.