Das Auslesen von Tabellen, die sich in einem anderen Datenbankschema als dem des angemeldeten Benutzers befinden, ist im JDBC-Extraktor nur über ein Präfix des Tabellennamens möglich. Das Präfix wird mittels Punkt vom Tabellennamen im Attribut tablename in den verschiedenen Elementen der Tabellenkonfiguration (jdbc_tableconfiguration.dtd) getrennt.
Beispiel
<doctable name="customer" tablename="USER1.CUSTOMER ">
Da der Punkt auch als Sonderzeichen im Schema- als auch im Tabellennamen vorkommen kann, muss jeder Punkt, der Teil des Schema- oder des Tabellennamens ist, mit einem Backslash-Zeichen \ maskiert werden. Um Backslash-Zeichen erkennen zu können, die Teil des Namens sind, müssen diese immer durch doppeltes Vorkommen maskiert werden.
In den folgenden Beispielkonfigurationen sind Schema- und Tabellennamen damit eindeutig unterscheidbar.
Schemaname |
Tabellenname |
Syntax für Attribut tablename |
---|---|---|
USER |
1.CUSTOMER |
USER.1\.CUSTOMER |
USER.1.1 |
ORDER.DE |
USER\.1\.1.ORDER\.DE |
USER. |
ORDER |
USER\..ORDER |
USER\2 |
ORDER.DE |
USER\\2.ORDER\.DE |
USER\.1 |
ORDER\.44 |
USER\\\.1.ORDER\\\.44 |
USER |
1.TABLE.1 |
USER.1.TABLE.1 |
Falls mehr als ein Punkt im Schema- und Tabellennamen vorkommt (siehe Beispiel in der letzten Tabellenzeile), der nicht mit dem Backslash maskiert ist, so wird der erste Punkt als Schematrenner interpretiert und die weiteren Punkte dem Tabellennamen zugeschlagen. Dies entspricht dem Verhalten vor Version 9.9 und wird aus Kompatibiltätsgründen beibehalten. Es wird trotzdem empfohlen, alle Punkte außer dem Schematrenner mit einem vorangestellten Backslash zu maskieren.
Die Maskierung jedes anderen Zeichens außer Punkt oder Backslash ist nicht zulässig.
Bei der Definition von Fremdschlüsseln ist zu beachten, dass der Wert in dem XML Attribut <fktablename> auf das XML Attribut <name> verweist und nicht auf den <tabllename>.
Beispiel
<jdbc_tableconfiguration>
<configuration name="Beispiel">
<docspec>
<doctable name="USER.1.CUSTOMER" tablename="USER\.1.CUSTOMER">
<condition fieldname="SEQUENCE" logicaloperator="in">
<value>001</value>
<value>099</value>
</condition>
<pkfield name="SEQUENCE"/>
</doctable>
</docspec>
<table name="FK_TABLE">
<pkfield name="SEQUENCE"
fktablename="USER.1.CUSTOMER" fkfieldname="SEQUENCE"/>
<fieldtoread name="FK_COLUMN1"/>
<fieldtoread name="FK_COLUMN2"/>
</table>
</configuration>
</jdbc_tableconfiguration>
Fehlt das Attribut tablename, dann wird der Inhalt des Attributs name als Tabellenname zum Zugriff auf die Datenbank herangezogen. Die beiden Attributwerte für die Attribute name und fktablename werden jedoch als reine Zeichenketten interpretiert und demnach nicht hinsichtlich Trenner und Maskierungszeichen ausgewertet.
Ist beispielsweise die Tabelle nur mit Attribut name folgendermaßen spezifiziert:
<doctable name="USER\.CUSTOMER">.
Dann ist das gleichbedeutend mit
<doctable name="USER\.CUSTOMER" tablename="USER\.CUSTOMER">.
Der Extraktor würde demnach auf der Datenbank die Tabelle USER.CUSTOMER auslesen.
Falls Sonderzeichen im Tabellennamen vorkommen, wird empfohlen, diesen immer mit Hilfe des Attributs tablename anzugeben.