[FOSSGIS-Talk] QGIS braucht ROWID in Oracle View zum Editieren?

Thomas Baschetti info at thomas-baschetti.de
Mi Jul 11 14:19:35 CEST 2018


Hallo zusammen,

ich habe hier ein Problem mit der Bearbeitung einer Oracle View:
QGIS 3.2.0-Bonn

Die View ist definiert zwischen einer Tabelle mit Geodaten und einer
alphanumerischen:

CREATE OR REPLACE FORCE EDITIONABLE VIEW "C##GIS"."VW_GEO_TEST" ("GID",
"PNAME", "GEOM",
CONSTRAINT "VW_TEST_PK" PRIMARY KEY ("GID") DISABLE) AS
  (select b.gid,a.name pname,a.geom
from GEO_QGIS_TEST a,geo_alpha_test b
where to_char(id)=b.gid);

Damit die View auch bearbeitbar ist habe ich Instead-Of-Trigger definiert,
also für insert:

CREATE OR REPLACE EDITIONABLE TRIGGER "C##GIS"."IOFT_INSERT_VW_GEO_TEST"
INSTEAD OF INSERT ON VW_GEO_TEST
FOR EACH ROW
DECLARE
BEGIN
insert into GEO_QGIS_TEST (id,name,geom)
values(to_number(:NEW.gid),:NEW.pname,:NEW.geom);
insert into geo_alpha_test (gid,at1) values(:NEW.gid,:NEW.pname);
END ioft_insert_vw_all_abs;
/
ALTER TRIGGER "C##GIS"."IOFT_INSERT_VW_GEO_TEST" ENABLE;


In die View kann ich per SQL problemlos Objekte einfügen, sie tauchen
korrekt in beiden Tabellen auf.

Wenn ich ein Objekt per QGIS neu digitalisiere und dann die Änderungen
speichere werden die Daten auch in beiden Tabellen gespeichert,
anschließend gibt QGIS aber eine Fehlermeldung aus:
==================================
Konnte Änderungen am Layer VW_GEO_TEST nicht festschreiben

Fehler: FEHLER: Ein Objekt nicht hinzugefügt.

Datenanbieterfehler:
      Oracle-Fehler beim Attributhinzufügen: Oracle-Fehler: Konnte
Objektkennung -4 nicht laden
    SQL: ORA-01445: Kann keine ROWID aus einer Join-View ohne Basistabelle
(der View) auswählen oder erfassen
    Konnte Anweisung nicht ausführen
    Fehler: SELECT "GID" FROM "C##GIS"."VW_GEO_TEST" WHERE ROWID=:a

==================================

Die Fehlermeldung ist hier etwas irreführend, das Objekt wurde tatsächlich
in der Datenbank gespeichert, aber anschließend versucht QGIS wohl das
Objekt über eine ROWID wieder zu lesen und scheitert.
Diese View hat aber leider keine ROWID:

>select a.rowid,a.* from VW_GEO_TEST  a;
ergibt
ORA-01445: Kann keine ROWID aus einer Join-View ohne Basistabelle (der
View) auswählen oder erfassen
01445. 00000 -  "cannot select ROWID from, or sample, a join view without a
key-preserved table"
*Cause:
*Action:
Fehler in Zeile: 59 Spalte: 25

Ist das so gewollt oder ein Fehler von QGIS? Denkfehler von mir?

Viele Grüße
Thomas


-- 

Thomas Baschetti - Systemanalyse Geographische Informationssysteme
Hakenstraße 8D
49074 Osnabrück

Tel: 0541 25 91 90 | mobil 01577 189 25 91
E-Mail: info at thomas-baschetti.de
www.thomas-baschetti.de
Ust-IdNr.: DE264355072


-- 


Thomas Baschetti - Systemanalyse Geographische Informationssysteme
Hakenstraße 8D
49074 Osnabrück

Tel: 0541 25 91 90 | mobil 01577 189 25 91
E-Mail: info at thomas-baschetti.dewww.thomas-baschetti.de
Ust-IdNr.: DE264355072


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste