Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja wymiany Oracle

Jeśli nie chcesz aktualizować istniejącej tabeli i chcesz tylko wybrać dane, możesz użyć tego nieco pracochłonnego zapytania.

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;

Użyłem XMLTYPE do oddzielenia liczb oddzielonych przecinkami do wierszy. Następnie połączyliśmy wiersze z drugą tabelą, aby uzyskać opis, a na koniec użyliśmy funkcji LISTAGG do utworzenia łańcucha oddzielonego przecinkami. Nie wiem, jak wydajne jest to zapytanie. Zgadzam się z komentarzem Marka Bannistera.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchamianie przykładowej aplikacji RMI

  2. Problemy z wywoływaniem procedury składowanej z C# z dużym CLOB

  3. Jak zainstalować klienta SQL * PLUS w systemie Linux?

  4. Nie można połączyć się z Oracle za pomocą PDO

  5. Dlaczego logowanie błędów dml zostało zignorowane w równoległym oświadczeniu?