[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