17. Modul ORAIN - Oracle Datenbank lesen

17.1. Allgemeines

Mit dem Skriptmodul können Objekte aus einer Oracle-Datenbank via ODBC gelesen werden. Der Modul unterstützt speziell die Oracle Option Spatial für räumliche Daten.

ORAIN unterstützt sämtliche Geometry-Typen von Oracle Spatial 9.2 und 10g. Diese sind POINT, LINE, POLYGON, MULTIPOINT, MULTILINE, MULTIPOLYGON und COLLECTION.

Der Modul wird mit:

|INCL \script\orain.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

17.2. Abhängigkeiten von anderen Modulen

Der Modul ORAIN ist eine Erweiterung des Moduls DBIN. Alle im Modul DBIN beschriebenen Anteile gelten auch für das Modul ORAIN. Ziehen Sie deshalb auch die Dokumentation des Modules DBIN bei.

17.3. Parametermap DB_PARAM

Folgende Parameter können in der Map DB_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
SOURCEoODBC-Source der Datenbank. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
USERoDatenbank User für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
PASSWORDoDatenbank Password für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
TRACEoON oder OFF, Default = OFF. Für jedes gelesene Objekt eine Zeile ausgeben.

17.4. Parametermap DBIN_PARAM

Folgende Parameter können in der Map DBIN_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.
SELECT_PARSEoON oder OFF, Default = ON. Definiert, ob ein eventuelles SQL-select Statement geparst werden soll. Als Argument für für das Modul kann ein SQL-select Statement definiert werden. Als Default wird dieses select-Statement von geparst , um spezielle Attribute zu erkennen, die vom ODBC-Treiber nicht unterstützt werden und speziell gelesen werden müssen. Manchmal können select-Statements (komplexe Joins) nicht erfolgreich geparst werden. In solchen Fällen ist dieser Parameter auf OFF zu schalten. Sie müssen besorgt sein, dass das select-Statement von ODBC verarbeitet werden kann.

17.5. Parametermap ORAIN_PARAM

Folgende Parameter können in der Map ORAIN_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
SPATIAL_PROCESSoON oder OFF, Default = OFF. Definiert ob Oracle Spatial Geometrien gelesen werden sollen. Mit OFF werden die Geometrien nicht gelesen. Mit ON werden die Geometrien gelesen.
FENCEostring, Default = OFF. Wenn ein Fence nicht mit OPT.fence definiert ist, kann mit diesem Parameter ein Fence definiert werden. Der Wert kann in folgenden zwei Varianten gesetzt werden. Variante als Point-Array mit geschlossener Fläche in der Form x1/y1,x2/y2,... . Variante als ein SQL-Statement, das eine Fläche als Geometrie liefert. Beispiel: select iltools_sdo_geometry_to_string(geom) as geom from filter where name like "name1"' . In der Variante als SQL-Statement muss die Geometrie wie im Beispiel mit der PL/SQL Funktion ILTOOLS_SDO_GEOMETRY_TO_STRING gelesen werden. Hochkommas ' im SQL-Statement müssen durch " ersetzt werden, weil in ICS das Hochkomma bereits als String-Deliminator verwendet wird.
FENCE_FILTERostring, Default = OFF.Definiert wie ein Fence als räumlicher Filter verwendet wird. Beispiel: sdo_relate(%GEOMETRY%,%FENCE%,"mask=inside+coveredby querytype=WINDOW")="TRUE"' . %GEOMETRY% ist der Plazhalter für das Geometrie-Attribut des Objektes und wird durch das entsprechende Attribut ersetzt. %FENCE% ist der Platzhalter für die Fence-Geometrie und wird durch die Geometrie des Fences ersetzt. Hochkommas ' im SQL-Statement müssen durch " ersetzt werden, weil in ICS das Hochkomma bereits als String-Deliminator verwendet wird. Das Statement des Filters wird als where-clause dem select-Statement für die Abfrage der Datenbank-Tabelle zugefügt. Besitzt eine Datenbank-Tabelle mehrere Geometrie-Attribute, so werden die Filter für die einzelnen Geometrien mit einem or zusammengefügt.

Für die Anwendung der Oracle Option Spatial ist die enstprechende Dokumentation von Oracle zu beachten.

17.6. Objektmodell

Der Modul liefert pro IN-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
IN.TABLE(s)rTablename des IN Objekts.
IN.<Geometry>(g)oEin Geometrie-Attribut wird mit demselben Namen wie in der Datenbank geliefert. Der enthaltene Wert entspricht einer ICS-Geometrie vom Typ point, line oder area.
IN.<Geometry>_SDO_GEOMETRY(s)oZusätzlich zu einem Geometrie-Attribut wird in einem Attribut mit dem Suffix _SDO_GEOMETRY die Oracle Spatial Geometrie als String geliefert.

Alle weiteren Komponenten sind abhängig von der Tabellen-Definition in der Datenbank.

17.7. Spezielles

Für das Lesen von Oracle Spatial sind folgende Punkte zu beachten.

Oracle Spatial lesen über ODBC mit Oracle PL/SQL

ODBC verarbeitet den Oracle Objekt-Typ MDSYS.SDO_GEOMETRY für die Geometrien nicht. Um die Geometrien über ODBC trotzdem lesen zu können, legt der Modul eine PL/SQL Funktion in Oracle an.

create function ILTOOLS_SDO_GEOMETRY_TO_STRING (geom MDSYS.SDO_GEOMETRY) RETURN CLOB

Diese Funktion wandelt eine Geometrie vom Typ MDSYS.SDO_GEOMETRY in einen String um. Die Funktion wird vom Modul beim Lesen der Geometrien wie folgt angewendet.

select ILTOOLS_SDO_GEOMETRY_TO_STRING(Geometrie) as Geometrie from Table

Die Funktion liefert die Geometrie als String, den der Modul dann in eine ICS-Geometrie umwandelt.

Der Oracle-User aus dem Daten gelesen werden sollen, muss deshalb die Berechtigung haben, eine Funktion anlegen zu können.

17.8. Exportierte Prozeduren und Methoden

Der Modul beinhaltet alle Prozeduren und Methoden wie der Modul DBIN. Ziehen Sie deshalb die Dokumentation des Modules DBIN bei. Zusätzlich stellt der Modul ORAIN folgende Prozeduren und Methoden zur Verfügung.

ProzedurORAIN_OPEN [s input][]
Beschreibung

Öffnet eine Datenbank definiert mit DB_PARAM.SOURCE und liest Objekte von der Datenbank in Abhängigkeit von <input>. Für <input> können folgende Werte verwendet werden.

*

Liest alle Tabellen der Datenbank.

<tablename>

Liest die Records der definierten Tabelle.

<tablename>,<sql-select-statement>

Liest die Records der definierten Tabelle entsprechend dem SQL-select-Statement. Beinhaltet das SQL-select-Statement Hochkommas für Strings so sind die Hochkommas ' durch Anführungszeichen " zu ersetzen.

Die Prozedur wird von RUN1 automatisch aufgerufen.

Beispiel
'CATEGORY,select * from CATEGORY where CNAME like "av%"' ORAIN_OPEN
 
MAP INPUT_SOURCES
   I1 => ORAIN,CATEGORY,'select * from CATEGORY where CNAME like "av%"'
END_MAP
ProzedurORAIN_READ_OBJECT [][b state]
Beschreibung

Liest das nächste IN-Objekt aus der geöffneten Datenbank-Tabelle. Die Prozedur wird von RUN1 automatisch aufgerufen.

Beispiel
ORAIN_READ_OBJECT [TRUE]
ProzedurORAIN_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
ORAIN_CLOSE
MethodeORACLE.SDO_GEOMETRY_TO_GEOM [s sdo-geometry][(i VAlignment,) (i HAlignment,) (r rotation,) g|li geometry, i dimension, s type, b status]
BeschreibungÜbersetzt eine Oracle-Spatial Geometrie als String in eine ICS-Geometrie. Kan die Geometry übersetzt werden wird als Status TRUE zurückgegen, ansonsten FALSE. Je nach SDO-Type wird die Geometry als einzelne Geometry oder als Liste von Geometrien zurückgegeben. Beim GeoMedia-Typ gmpoint wird zusätzlich die Rotation geliefert. Beim GeoMedia-Typ gmtext wird zusätzlich die Rotation, der Text, das horizontale und das vertikale Alignment geliefert. Folgende Typen werden zurückgegeben: point,line,polygon,multipoint,multiline,multipolygon,collection,gmpoint,gmtext.
Beispiel
IF IN.Geometrie ORACLE.SDO_GEOMETRY_TO_GEOM THEN
   => VAR.TYPE
   => VAR.DIM
   => VAR.GEOM
   IF    VAR.TYPE = 'gmpoint' THEN
      => VAR.ROT
   ELSIF VAR.TYPE = 'gmtext' THEN
      => VAR.ROT
      => VAR.HALI
      => VAR.VALI
   END_IF
END_IF
 

Folgende Konversionen werden durchgeführt:

SDO-point

to point

SDO-line

to line

SDO-polygon

to area

SDO-multipoint

to list of points

SDO-multiline

to list of lines

SDO-multipolygon

to list of areas

SDO-collection

to list of points und/oder lines und/oder areas

GEOMEDIA-SDO-point

to point and orientation

GEOMEDIA-SDO-text

to point and orientation, text, horizontal alignment, vertical alignment

17.9. Skriptbeispiel

! Diese ICS Konfiguration zeigt alle von orain.mod
! gelesenen Objekte in der .log Datei an.

|LICENSE \license\iltoolspro.lic

MAP USER_INPUT1
   DIALOG        => ODBC
   OPT           => input
END_MAP

MAP DB_PARAM
   SOURCE     => '' ! ODBC-Source
   USER       => '' ! ODBC-User
   PASSWD     => '' ! ODBC-Password
   TRACE      => OFF
END_MAP

MAP ORAIN_PARAM
   STATISTICS           => ON
   SPATIAL_PROCESS      => ON
END_MAP

MAP INPUT_SOURCES
   I1 => ORAIN,*
END_MAP

MAP INOUT
   I1 => DISPLAY_IN0
END_MAP

|INCL \script\orain.mod
|INCL \script\db2il\dbdisplay.out
|INCL \script\run1.prg