Konvertierungsfunktionen

04.
März
2012
Veröffentlicht von: Bernhard Koch

Vor einiger Zeit habe ich eine Verbindung zwischen einer Oracle Datenbank Standard Edition 11.2 und einer MySQL Datenbank hergestellt. Nach Einrichtung des Gateways hat das auch soweit funktioniert.

Vor einiger Zeit habe ich eine Verbindung zwischen einer Oracle Datenbank Standard Edition 11.2 und einer MySQL Datenbank hergestellt. Nach Einrichtung des Gateways hat das auch soweit funktioniert.

Problematisch wurde es beim Auslesen der Daten. Bei einem Select bekam ich folgendes Ergebnis:

select "page_id", "page_title" from "page_table"@wik;

   page_id page_title
---------- ----------------------------------------
       201 313167523275706772616465
       166 415045582D4C697374656E6572
       232 415045585F342E305F4541325F42657269636874

Die Page_ID war ja soweit OK, aber in der Spalte Page_Title hätte ich einen lesbaren String erwartet. Daraufhin habe ich mir in Oracle SQL*Plus die Beschreibung der Tabelle ausgeben lassen:

desc page_table@wik
 Name                      Null?    Type
 ------------------------- -------- ------------
 page_id                            NUMBER(10)
 page_title                NOT NULL RAW(255)

Ich hatte es also laut Ausgabe mit einem RAW Datentyp zu tun. In MySQL ist die Bezeichnung des Datentyps VARBINARY(255).

Nach einigem Suchen bei den Konvertierungsfunktionen bin ich auf das Package UTL_RAW gestoßen. Die Funktion CAST_TO_VARCHAR2 hat als Übergabeparameter unter anderem den Datentyp RAW und gibt als Datentyp VARCHAR2 zurück.

Jetzt lieferte mein Select folgendes Ergebnis:

select utl_raw.cast_to_varchar2("page_title") from "page_table"@wik;

UTL_RAW.CAST_TO_VARCHAR2("PAGE_TITLE")
----------------------------------------------
Fachbücher
Benutzerhandbücher


Ich hatte also noch ein weiteres Problem zu lösen. Meine Oracle Datenbank hat den Zeichensatz WE8MSWIN1252. Die MySql Datenbank arbeitet mit dem Zeichensatz UTF8. 

Die CONVERT Funktion hilft an dieser Stelle weiter. 

CONVERT( char, dest_char_set, source_char_set )

Nach dem Einbau der Convert-Funktion sieht die Abfrage nun so aus:

select convert(utl_raw.cast_to_varchar2("page_title"),'WE8MSWIN1252','UTF8') from "page_table"@wik;

CONVERT(UTL_RAW.CAST_TO_VARCHAR2("PAGE_TITLE"),'WE8MSWIN1252','UTF8')
----------------------------------------------------------------------
Fachbücher
Benutzerhandbücher


Es sind zwar einige Umwege nötig, aber letztendlich bekommt man durch Verschachtelung der Funktionen ein sinnvolles Ergebnis.

Zur Info:
Das Package UTL_RAW wird unter anderem in unserem Kurs Opens internal link in current windowOracle Packages Schulung behandelt.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.