[FOSSGIS-Talk] QGIS und ORACL-Datenbank
Thomas B
rdbath.regiodata at gmail.com
Mi Nov 3 17:45:07 CET 2021
Hallo Peter,
anbei ein Beispiel-DDL, das bei mir ohne Probleme im Zusammenspiel mit QGIS
funktioniert:
https://gist.github.com/thbaumann/6f2b5da6e5f6b74f802dde7230835055
Vielleicht mal bei dir den Testlayer erzeugen und gegenprüfen. In QGIS muss
man halt noch im Attributformular für die ID-Spalte die Restriktion
rausnehmen, damit man speichern kann ohne Einträge in der ID-Spalte gesetzt
zu haben aber wenn ich richtig gelesen habe hast du das ja getan.
Ansonsten vielleicht auch mal abseits von QGIS versuchen den Trigger
anzusprechen und schauen, ob der vielleicht generell wo hängt unabhängig
von QGIS?
Zu deiner Frage des Zusammenspiels von QGIS und Oracle: Ich denke der
Oracle-Provider bräuchte mal etwas Pflege...gerade auch was das Erkennen
der Primärschlüsselspalte angeht aber jetzt beim konkreten Beispiel kann
ich da wiegesagt die Sachen speichern egal ob ich Werte eingebe oder die
Sequenz ziehen lasse.
Viele Grüße,
Thomas
Am Di., 2. Nov. 2021 um 15:50 Uhr schrieb Peter K. <webentry at web.de>:
> 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
> --
> ....................................................................
> FOSSGIS Veranstaltungen
> https://www.fossgis.de/news/fossgis-events/
>
> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
> GIS-Bereich und Freier Geodaten!
> https://www.fossgis.de/ https://twitter.com/FOSSGIS_Verein
>
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste
>
Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste