16. Modul ORAOUT - Oracle-Datenbank schreiben

16.1. Allgemeines

Mit dem Skriptmodul können Objekte in eine Oracle-Datenbank via ODBC geschrieben werden. Der Modul unterstützt speziell die Oracle Spatial Option für räumliche Daten. Der Modul kann mit RUN1 verwendet werden.

ORAOUT 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 beinhaltet folgende Besonderheiten:

  • Schreibt Daten nach Oracle Spatial.

  • Legt Tabellen für die Daten an.

  • Schreibt die notwendigen Definitionen für Oracle Spatial.

  • Schreibt die Geometrien für Oracle Spatial.

  • Schreibt den Spatial Index für die Geometrien von Oracle Spatial.

  • Die Datenbank kann nach dem Schreiben der Daten direkt mit Oracle Spatial weiterbearbeitet werden.

Der Modul wird mit:

|INCL \script\oraout.mod

in einer ICS Konfiguration verfügbar gemacht.

16.2. Abhängigkeiten von anderen Modulen

Der Modul ORAOUT ist eine Erweiterung des Moduls DBOUT. Alle im Modul DBOUT beschriebenen Anteile gelten auch für das Modul ORAOUT. Ziehen Sie deshalb die Dokumentation des Modules DBOUT bei, insbesondere die Abschnitte über die Parametermaps DB_PARAM und DBOUT_PARAM.

16.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.

16.4. Parametermap DBOUT_PARAM

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

Parameterreq/optBeschreibung
CREATE_TABLEoON, OFF,Default = OFF. Definiert ob die Tables definiert mit Record-Definitionen (siehe weiter unten) in der Datenbank erzeugt werden sollen. Mit OFF werden die Tabellen nicht erzeugt. Mit ON werden die Tabellen erzeugt und zwar zum Zeitpunkt, wenn das erste Objekt in die Tabelle geschrieben wird. Tables in die keine Objekte geschrieben werden, werden auch nicht erzeugt.
DELETE_OLDoON, OFF oder DROP, Default = OFF. Löscht bestehende Daten in Tables definiert mit Record-Definitionen (siehe weiter unten). Mit OFF werden keine Daten gelöscht. Mit ON werden die Daten über ein delete-sql-statement gelöscht. Mit DROP wird die Table und damit die Daten gelöscht. Zusammen mit DROP und dem Parameter CREATE_TABLE => ON werden die Tables gelöscht und wieder erzeugt.
BATCHoON oder OFF, Default = OFF. Mit OFF werden die sql-statements direkt auf der Datenbank ausgeführt. Mit OFF werden die sql-statements in ein Batchfile geschrieben. Mit dem Parameter BATCH_FILE wird das Batchfile definiert.
BATCH_OUTPUT_DIRo<directory>. Definiert ein Output-Directory für Batchfiles. Mit diesem Parameter kann das Output-Directory für Batchfiles definiert werden, falls der Parameter BATCH = ON definiert ist. Batchfiles können sein ein File mit SQL-Statementes oder in Kombination mit dem Oracle Output Modul die SQLLOADER-Bulkfiles. Ist dieser Parameter nicht gesetzt, so wird das Output-Directory aus einem eventuellen Input-File definiert in OPT.input bestimmt. Ist kein Input-File definiert, so ist das Output-Directory iltools\data\ics.sql.
BATCH_FILEo<file>. Definiert das Batchfile. Mit diesem Parameter kann das Batchfile definiert werden, falls der Parameter BATCH = ON definiert ist. Ist dieser Parameter nicht gesetzt, so wird das Batchfile aus einem eventuellen Input-File definiert in OPT.input mit der Endung .sql bestimmt. Ist kein Input-File definiert, so ist das Batchfile iltools\data\ics.sql als definiert. Das Batchfile beinhaltet SQL-Statements, um die transferierten Daten mittels SQL in eine Datenbank zu importieren.
SQLTRACEoON oder OFF, Default = OFF. Zeigt alle sql-statements im Logfile an.
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.
DATASEToON oder OFF, Default = OFF. Definiert, ob die in die Datenbank geschriebenen Daten als Datasets verwaltetet werden. Sie dazu mehr unter dem Kapitel Datasets. Der Wert ON hebt den Parameter DELETE_OLD auf.

16.5. Parametermap ORAOUT_PARAM

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

Parameterreq/optBeschreibung
SQLLOADER_USEoON oder OFF, Default = OFF. Definiert ob das Schreiben der Daten in die Datenbank über die Oracle-Utility SQLLoader erfolgen soll. SQLLoader ermöglicht das schnelle Laden grosser Datenmengen in Oracle Spatial. Ist dieser Parameter auf ON gesetzt, so werden sogenannte Bulk-Files für SQLLoader erstellt. Ist der Parameter DBOUT_PARAM.BATCH auf OFF gesetzt, so werden die Bulk-Files erstellt und mit SQLLoader während des Transfers in die Datenbank gelesen. Ist der Parameter DBOUT_PARAM.BATCH auf ON gesetzt, so werden lediglich die Bulk-Files erstellt. Diese Variante ermöglicht das Erstellen von Bulk-Files zur späteren Weiterverarbeitung oder zur Abgabe an Dritte.
SQLLOADER_CMDo<command>. Default undefiniert. Ist der Parameter ORAOUT_PARAM.SQLLOADER_USE auf ON gesetzt muss dieser Parameter mit dem Command für die Utility SQLLoader gesetzt sein. Das zu setztende Command enstpricht dem Befehl, wie er auf einer Commandline für SQLLoader angwendet werden muss. Beispiel: sqlldr.exe userid=scott/tiger@ORACL. Anstatt des Commands kann im Parameter auch der Verweis auf eine Datei definiert werden, welche das Command beinhaltet.
SQLLOADER_DECIMALPOINTo<char>. Default , . Definiert den Dezimalpunkt für reelle Zahlen in den SQLLoader-Bulk-Files.
SQLLOADER_CONTINUECODEo<string>. Default # . Definiert die Fortsetzungszeichen in den SQLLoader-Bulk-Files.
SQLLOADER_FIELDSEPARATORo<string>. Default | . Definiert die Spaltentrennzeichen in den SQLLoader-Bulk-Files.
SPATIAL_STROKEo<real> oder OFF, Default = OFF. Stroke-Tolerance zur Auflösung von Kreisbögen in Liniensegmente. Als Stroke-Tolerance können dieselben Werte wie für die ICS-Methode ICS.STROKE verwendet werden (s.a. iG/Script Benutzer- und Referenzhandbuch). Mit OFF werden die Kreisbögen nicht aufgelöst.
SPATIAL_METAINSERToON oder OFF, Default = ON. Definiert ob die Metadaten für Oracle Spatial in die Tabelle user_sdo_geom_metadata geschrieben werden sollen.
SPATIAL_INDEXCREATEoON oder OFF, Default = ON. Definiert ob die Indexe für die Geometrie-Spalten für Oracle Spatial erzeugt werden sollen. Aufgrund der Tabelle und des Attributes wird automatisch ein Indexname erzeugt.
SPATIAL_INDEXDROPoON oder OFF, Default = ON. Definiert ob die Indexe für die Geometrie-Spalten vor dem Schreiben der Daten gelöscht werden sollen. Dies ermöglicht das schnellere Schreiben der Daten. Mit ORAOUT_PARAM.SPATIAL_INDEXCREATE => ON werden die Indizes nach dem Schreiben wieder angelegt.
SPATIAL_INDEXTYPEoQTREE oder RTREE, Default = RTREE. Definiert den Indextyp für die Geometrie-Spalten von Oracle Spatial.
SPATIAL_INDEXTABLESPACEo<tablespace> oder OFF, Default = OFF. Definiert den Tablespace für die Indizes der Geometrie-Spalten von Oracle Spatial.
SPATIAL_VALIDATEoON oder OFF, Default = OFF. Definiert ob Oracle Spatial SQL-Statements in das Logfile gesschrieben werden sollen. Mit diesen Statements können nachträglich unter Oracle Spatial die Geometrien validiert werden.
SPATIAL_SRIDo<integer> oder OFF, Default = OFF. Definiert die ORacle-SRID-Identifikation für die Geometrien. Jede Geometrie wird mit dem definierten SRID nach Oracle geschrieben.
SPATIAL_META_X o<min,max,resolution>. Default 0,1000000,0.001. Definiert für die Metadaten von Oracle Spatial die Ausdehnung und Auflösung der X-Koordinaten.
SPATIAL_META_Y o<min,max,resolution>. Default 0,1000000,0.001. Definiert für die Metadaten von Oracle Spatial die Ausdehnung und Auflösung der Y-Koordinaten.
SPATIAL_META_Z o<min,max,resolution>. Default 0,1000000,0.001. Definiert für die Metadaten von Oracle Spatial die Ausdehnung und Auflösung der Z-Koordinaten.
SPATIAL_GEOM_CLEANoON oder OFF, Default =OFF . Definiert ob die Geometrien für Oracle aufbereitet weden sollen. Mit OFF werden die Geometrien nicht aufbereitet. Mit ON werden die Geometrien aufbereitet. Mehr zur Funktion GEOM_CLEAN siehe im Benutzerhandbuch iG/Script im Appendix.

Für die Anwendung der Oracle Spatial Option und der Oracle-Utility SQLLoader ist die entsprechende Dokumentation von Oracle zu beachten.

16.6. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
OUT.TABLE(s)rTablename des OUT Objekts.
OUT.<Attribut>(s)oAttributname der Tabelle. Der Wert der Komponente beinhaltet den Wert für die Datenbank. Der Type des Wertes muss mit dem Type des Attributes in der Datenbank übereinstimmen. Es können beliebig viele Attribute definiert werden.

Dieses Objektmodell gilt für die Anwendung mit der Prozedur ORAOUT_WRITE_OBJECT0. Die Tabellen mit den Attributen müssen in der Datenbank bereits bestehen oder in einer Konfiguration mit Prozeduren und Methoden vorgängig kreiert werden. Falls die Datenbankstrukturen automatisiert mit dem Modul erstellt werden sollen, so beachten Sie das Kapitel mit den Record-Definitionen und die Prozedur ORAOUT_WRITE_RECORD1.

16.7. Record Definitionen

Mit Record Definitionen können nicht nur Objekte in die Datenbank geschrieben werden, sondern auch Datenbank-Tabellen automatisiert in der Datenbank angelegt werden. Die Record Definitionen werden von der Prozedur ORAOUT_WRITE_RECORD1 verarbeitet. Eine Record Definition sieht wie folgt aus.

MAP RECORD_<n>
   TABLE => <Table-Name>
   :
   <Attribute-Name> => <Attribute-Type>,<Attribute-Value>
   :
END_MAP

Die einzelnen Bestandteile einer Record-Definition sind:

RECORD_<n>

Eine Record Definition ist eine Map. Der Map-Name muss mit dem Prefix RECORD_ beginnen und eine eindeutige Nummer <n> für die Record Definition beinhalten.

TABLE

Diese Komponente ist obligatorisch und definiert die Datenbank-Tabelle.

<Table-Name>

Definiert als Wert der Komponente TABLE die Datenbank-Tabelle.

<Attribute-Name>

Definiert als Komponente einen Attribut-Namen innerhalb der Tabelle. Es können beliebig viele Attribute als Komponenten definiert werden.

<Attribute-Type>

Definiert den Attribut-Type in der Datenbank. Im Normalfall können der Datenbank bekannt Typen verwendet werden. Spezialtypen einer Datenbank werden eventuell nocht nicht unterstützt. Solche Spezialtypen werden bei Bedarf und auf Anfrage implementiert. Bei den Typen ist auf folgendes zu achten.

CHAR(<length>)

Stringtypen sind immer als CHAR mit der Länge <length> zu definieren. Je nach Datenbank wird der Typ vom Modul in einen der Datenbank bekannten Type umgewandelt z.B. Oracle als VARCHAR2.

NUMBER

Number-Typen ohne Argumente werden vom Modul als NUMBER(38,5) interpretiert.

DATE("YYYY-MM-DD")

Datums Typ. Mit dem Datums Typ muss auch das Format des Datums definiert werden. Der Modul erzeugt aufgrund des Formats eine entsprechende SQL-Anweisung TO_DATE('1993-04-03','YYYY-MM-DD')). Der Wert für das Attribut, muss als Integer oder String die Form YYYYMMDD aufweisen. Zum Beispiel <Attribute-Value>=19939493 oder <Attribute-Value>='19939493' .

MDSYS.SDO_GEOMETRY(<type>;<dimension>;<resolution>)

Oracle Spatial Geometrien müssen als Type MDSYS.SDO_GEOMETRY definiert werden. Dabei sind folgende weiteren Definitionen notwendig.

<type>

Type der Geometrie, einer der Werte: point|line|area|gmtext.

<dimension>

Dimension der Geometrie, einer der Werte: 2D|3D|3DM.

3DM nur für Geometrietyp line erlaubt. Die 3 Koordinate wird als Measurement interpretiert.

<resolution>

Real-Wert der Auflösung.

<Attribut-Value>

Definiert den Wert für das Attribut. Als Wert können Konstanten oder ICS-Variablen, die einen Wert beinhalten - z.B. IN.OBJID - verwendet werden.

Beispiel einer Record Definition.

MAP RECORD_1
   TABLE => Fixpunkte_LFP
   OBJID => CHAR(10),IN.OBJID
   ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID
   NUMMER => CHAR(12),IN.Nummer
   GEOMETRIE => MDSYS.SDO_GEOMETRY(point;3D;0.001),IN.Geometrie
   LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT
   HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT
   BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT
   SYMBOLORI => NUMBER,IN.SymbolOri
   ART_TXT => CHAR(4),IN.Art_TXT
   HERKUNFT => CHAR(30),IN.Herkunft
END_MAP

16.8. Datasets

Zur Verwaltung von Datasets in der Datenbank ist das analoge Kapitel des Modules DBOUT zu beachten.

16.9. Datenbank Modellgenerierung mit CONFIG_PARAM.GENERATE_MODEL

Falls basierend auf den Record-Definitionen vor einem Datentransfer das gesamte Datenbankmodell inklusive den notwendigen Oracle Spatial Definitionen erstellt werden soll, so ist der Parameter CONFIG_PARAM.GENERATE_MODEL auf ON zu setzen und das Script il2ora.lib zu includen:

MAP CONFIG_PARAM
   GENERATE_MODEL => ON
END_MAP
:
|INCL \script\il2db\il2ora.lib

Entsprechend den Record-Definitionen wird vor einem Datentransfer das Datenbankmodell angelegt, falls es nicht schon angelegt wurde.

16.10. Prozeduren und Methoden

Der Modul beinhaltet alle Prozeduren und Methoden wie der Modul DBOUT. Ziehen Sie deshalb die Dokumentation des Modules DBOUT bei.

Zusätzlich stellt der Modul ORAOUT folgende Prozeduren und Methoden zur Verfügung.

ProzedurORAOUT_OPEN [][]
BeschreibungÖffnet eine Datenbank definiert mit DB_PARAM.SOURCE. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
ORAOUT_OPEN
ProzedurORAOUT_WRITE_OBJECT0
Beschreibung

Schreibt einen Objekt in die Datenbank. Das OUT-Objekt muss gemäss dem Objektmodell vorbereitet sein.

Beispiel
ORAOUT_WRITE_OBJECT0
ProzedurORAOUT_WRITE_RECORD1 ! s recordname
Beschreibung

Schreibt ein Objekt definiert in <recordname> in die Datenbank. <recordname> ist der Name einer Record-Definition (siehe weiter oben). Je nach den gesetzten Parametern führt die Prozedur beim ersten Aufruf für eine Record-Definition folgende Aktionen auf der Datenbank aus:

  1. Die Tabelle oder deren Inhalt wird gelöscht, falls definiert durch Parameter.

  2. Die Tabelle wird erzeugt, falls definiert durch Parameter.

  3. Die Oracle Spatial Metadefinitionen werden generiert, falls definiert durch Parameter.

  4. Das Objekt wird in die Datenbank geschrieben.

Beispiel
... => ORAOUT_WRITE_RECORD1,RECORD_1
ProzedurORAOUT_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
ORAOUT_CLOSE
MethodeORACLE.GEOM_TO_SDO_GEOMETRY [g|li geom, i dimension [, b measurement]][s sdo-geometry]
BeschreibungÜbersetzt eine ICS-Geometrie point,line oder area in eine Oracle-Spatial Geometrie als String. Als Input können auch Listen von Geometrien übergeben werden. Falls die Geometrien nicht übersetzt werden können, wird auf dem Stack ein NULL-String zurückgegeben. Boolean measurement ist optional und nur für dimension 3 und Geometrien vom Type line erlaubt. Die 3 Koordinate wird als Measurement interpretiert.
Beispiel
IN.GEOM 2 ORACLE.GEOM_TO_SDO_GEOMETRY => VAR.SDO_GEOM
 

Folgende Konversionen werden durchgeführt:

point

to SDO-point

line

to SDO-line

area

to SDO-polygon

list of points

to SDO-multipoints

list of lines

to SDO-multilines

list of areas

to SDO-multipolygon

list of points and/or lines and/or areas

to SDO-collection

MethodeORACLE.SET_RESOLUTION [r resolution][]
BeschreibungDefiniert die Resolution mit der die Koordination von Geometrien in eine Oracle-Spatial Geometrie übersetzt werden. Default ist 0.001. Zum Beispiel wird mit der Resolution 0.00001 eine Koordinate mit 5 Nachkommastellen übersetzt.
Beispiel
0.001 ORACLE.SET_RESOLTION

Neben diesen Prozeduren des Modules stehen auch die Prozeduren und Methoden des Modules DBOUT zur Verfügung. Diese Prozeduren und Methoden sind im Modul DBOUT beschrieben.

16.11. Skriptbeispiel

! Diese ICS Konfiguration liest ein INTERLIS FIle,
! kreiert eine Tabelle für LFP's in der Datenbank
! und schreibt die LFP's in die Tabelle.

|LICENSE \license\iltoolspro.lic

MAP USER_INPUT1
   DIALOG        => FILE
   MESSAGE       => 'Enter INTERLIS Input File'
   FILE_FILTER   => itf
   FILE_EXISTS   => TRUE
   OPT           => input
END_MAP

MAP USER_INPUT2
   DIALOG        => ODBC
   OPT           => output
END_MAP

MAP ILIN_PARAM
   INTERLIS_DEF => \models\Grunddatensatz.ili
   STATISTICS   => ON
   CALC_SURFACE => ON
   ENUM_TO_TEXT => ON
   TRACE        => OFF
END_MAP

MAP ILIN_TOPO
   DEFAULT => OFF
END_MAP

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

MAP DBOUT_PARAM
   STATISTICS      => ON
   CREATE_TABLE    => ON
   DATASET         => ON
END_MAP

MAP ORAOUT_PARAM
   SPATIAL_STROKE          => OFF ! OFF or a real Stroke-Tolerance
   SPATIAL_METAINSERT      => ON  ! ON|OFF Spatial Meta Insert
   SPATIAL_INDEXDROP       => ON  ! ON|OFF Spatial Index Drop   before Insert
   SPATIAL_INDEXCREATE     => ON  ! ON|OFF Spatial Index Create after Insert
   SPATIAL_VALIDATE        => OFF ! ON|OFF Spatial Validate after Insert
   SPATIAL_META_X          => 0,1000000,0.001 ! x-min,x-max,x-tolerance
   SPATIAL_META_Y          => 0,1000000,0.001 ! y-min,y-max,y-tolerance
   SPATIAL_META_Z          => 0,1000000,0.001 ! z-min,z-max,z-tolerance
   SPATIAL_INDEXTABLESPACE => OFF
   SPATIAL_SRID            => OFF
END_MAP

MAP RECORD_1
   TABLE => Fi_LFP
   OBJID => CHAR(10),IN.OBJID
   ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID
   NUMMER => CHAR(12),IN.Nummer
   GEOMETRIE => MDSYS.SDO_GEOMETRY(point;3D;0.001),IN.Geometrie
   LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT
   HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT
   BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT
   SYMBOLORI => NUMBER,IN.SymbolOri
   ART_TXT => CHAR(4),IN.Art_TXT
   HERKUNFT => CHAR(30),IN.Herkunft
END_MAP

MAP INPUT_SOURCES
   I1 => ILTOPO,OPT.input
END_MAP

MAP INOUT
   I1                => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP  => ORAOUT_WRITE_RECORD1,RECORD_1
   I1,*              => OFF
END_MAP

|INCL \script\iltopo.mod
|INCL \script\oraout.mod
|INCL \script\run1.prg