Zwei Datenbanken verlinken

Quote

Wer kennt das nicht? Man hat zwei Oracle-Datenbanken und möchte gerne aus Datenbank 1 heraus eine Tabelle aus Datenbank 2 per SQL und JOIN einbinden.

Wie sage ich Oracle in der Datenbank 1 jedoch, dass die Tabelle in Datenbank 2 liegt? Solange die vollständige Spracherkennung und das Gedankenlesen unter Oracle noch nicht funktioniert, kann man sich damit behelfen, einen Datenbank-Link aufzubauen.

CREATE PUBLIC DATABASE LINK DeinGewünschterLinkname CONNECT TO UsernameInDatenbank2 IDENTIFIED BY PasswortInDatenbank2 USING ‘TNSNameVonDatenbank2′;

Sodann kann man die Tabelle recht einfach über SQL ansprechen und in einen JOIN einbinden.

SELECT T1.*, T2.* FROM DeineTabelle T1 LEFT JOIN AndereTabelle@DeinGewünschterLinkname T2 ON T1.JoinFeld = T2.JoinFeld

Einzige Voraussetzung für das oben angeführte Vorgehen ist, dass Datenbank2 unter dem TNSNameVonDatenbank2 systemweit bekannt ist.

Umwandeln von Text in Zahl

Vielleicht kennt der eine oder andere das Problem ja auch. Man möchte per SQL in Oracle ein wenig mit einem Feld rechnen und läuft ständig auf den Fehler

ORA-01722: Ungültige Zahl
01722. 00000 -  “invalid number”

Dabei fällt dann auf, dass es sich gar nicht um eine Zahl handelt, sondern um ein Textfeld. Und in diesem Textfeld sind Zahlen im Format “5.000″ geschrieben (also mit einem sogenannten Gruppentrennzeichen).

Die meisten werden jetzt sagen, dass man das schon zum Zeitpunkt des Datenbankdesigns bedenken sollte. Geschenkt. Das Kind ist in den Brunnen gefallen. :)

Um dennoch mit einer solchen Zahl rechnen zu können, wandelt man den Text einfach per SQL zur Laufzeit in eine Zahl um. Hier der entsprechende Code dazu:

SELECT TO_NUMBER( Textfeld,’999G999G999D99′) FROM Tabelle;

Hier nehme ich an, dass der Zahlenwert keine Milliarde groß ist (sonst einfach erweitern) und dass es sich um zwei Nachkommastellen handelt (diese kann man ebenso erweitern oder auch weglassen).