[FOSSGIS-Talk] QGIS und ORACL-Datenbank

Peter K. webentry at web.de
Di Nov 2 15:37:49 CET 2021


Hallo an alle und an Thomas,

leider nochmal das Thema ORACLE-DB und speziell zur automatischen Erzeugung der ID in der DB-Tabelle.
Kurz noch zur Info, im April hat Thomas u.a. diesen Tipp gegeben:
>>>>>
Zum unterschiedlichen Verhalten der QGIS-Installationen:
In QGIS selbst könnte man in der Konsole schauen, was als ORACLE_HOME und
TNS_ADMIN hinterlegt ist und ob da die tnsnames.ora angesprochen wird, die
benutzt werden sollte:
import os
print(os.environ['ORACLE_HOME'])
print(os.environ['TNS_ADMIN'])
<<<<<

Ergebnis hier zu:
print(os.environ['TNS_ADMIN']) = \\OracleConf\DATEN\pub\OracleConf\ORA

print(os.environ['ORACLE_HOME']) = 

Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "<string>", line 2, in <module>
  File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\os.py", line 678, in __getitem__
    raise KeyError(key) from None
KeyError: 'ORACLE_HOME'

Das nur nochmal zur Info an Thomas, hatte ich wohl damals nicht mehr erwähnt.

Nun zurück zur ID, in der verwendeten DB-Tabelle gibt es vier Spalten mit der Bedingung 'NOT NULL'.
Bei zwei Attributspalten sind diese recht einfach, und werden mit entsprechenden QGIS-Vorgaben abgearbeitet.
In die vierte DB-Spalte, 'ID-KOPIE' wird die DB-Tabellen 'ID' nochmal hinein kopiert, dies ist für die derzeitig verwendete
CAD/GIS-Anwendung wohl nötig. Auch dies wird über einen Vorgabewert in QGIS gelöst, obwohl es dafür auch
einen Trigger in der ORACLE-DB gibt.

Als Umgehungslösung wird derzeit aber auch die Erzeugung der 'ID' mit einem Eintrag im Feld 'Vorgabewert'
durchgeführt.
Eintrag: CASE WHEN "ID" is NULL THEN maximum( "ID")+1 ELSE "ID" END

Das ist natürlich keine gute Lösung.

Ist der o.g. Vorgabewert nicht gesetzt, bekomme ich diese Fehlermeldung:
>>>>>>>>>
Konnte Änderungen am Layer FL_NUTZUNG_MULTI nicht festschreiben

Fehler: FEHLER: Objekt nicht hinzugefügt.
Datenanbieterfehler:
Oracle-Fehler beim Attributhinzufügen: Oracle-Fehler: Konnte Objekt -27 nicht einfügen
SQL: ORA-20001: Primärschlüssel nicht gesetzt! Ids: -999999 / -999999
ORA-06512: in "FPLAN.FL_NUTZUNG_B_IUD", Zeile 183
ORA-04088: Fehler bei der Ausführung von Trigger 'FPLAN.FL_NUTZUNG_B_IUD'
Konnte Anweisung nicht ausführen
Fehler: INSERT INTO "FPLAN"."FL_NUTZUNG"("GEOMETRIE","ID","NUTZUNG","NUTZUNG_LV","FL_CODE","BEMERKUNG","AREA","ALTLAST","AL_NAME",
"AFM","GR_RING","BN","BRACHE","DB_FC_1","DB_FC_2","DB_FC_TEXT","KG_NR","KG_BEMERKUNG","KONTROLLE","ST_LA_SA","OS_LSA","FS_LSA",
"SO_NUTZUNG","CREATOR","CREATED","EDITOR","EDITED","ID_KOPIE","BEIPLANDARSTELLUNG","LSG","NSG","KG_RNAHME","BPLANNR","MWE",
"DB_FC_TEXT_2") VALUES (:a,:bb,:bc,:bd,:be,:bf,:bg,:bh,:bi,:bj,:bk,:bl,:bm,:bn,:bo,:bp,:cba,:cbb,:cbc,:cbd,:cbe,:cbf,:cbg,:cbh,
:cbi,:cbj,:cbk,:cbl,:cbm,:cbn,:cbo,:cbp,:cca,:ccb,:ccc)
<<<<<<<<<<

So weit nochmal der Stand hier, bei der Nutzung einer ORACLE-DB mit QGIS. 

Nächste Woche gibt es ein Gespräch beim DB-Betreiber. Darum wollte ich auch mal Fragen, ob es vielleicht spezielle Punkte gibt
die Datenbankseitig für die Nutzung mit QGIS zu beachten sind. Scheinbar reagieren ja die ORACLE-Trigger nicht auf die 'QGIS'
Rückmeldungen.
So genug Text, Gruß Peter

Verwendete QGIS-Versionen: 3.16.11 und 3.18.3


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste