source: trunk/data/konvert/postnas_0.7/alkis-trigger-kill-oracle.sql @ 209

Revision 209, 2.8 KB checked in by j.e.fischer, 8 years ago (diff)

Oracle-Fixes:

  • Trigger: Einträge in "DELETE".typename auf 30 Zeichen kürzen
  • pg-to-oci.pl: Kommentare zu PostGIS-Metatabellen überspringen

Schemaänderungen:

  • weitere Kommentare zu neuen Tabellen ergänzt
Line 
1CREATE OR REPLACE TRIGGER delete_feature_trigger
2        BEFORE INSERT ON "DELETE"
3        FOR EACH ROW
4DECLARE
5        query varchar2(2047);
6        begsql varchar2(2047);
7        aktbeg varchar2(2047);
8        gml_id varchar2(2047);
9BEGIN
10        :NEW.typename := upper(substr(:NEW.typename,1,30));
11        :NEW.context  := lower(:NEW.context);
12        gml_id        := substr(:NEW.featureid, 1, 16);
13
14        IF :NEW.context IS NULL THEN
15                :NEW.context := 'delete';
16        END IF;
17
18        IF :NEW.context='delete' THEN
19                -- ersatzloses Loeschen eines Objektes
20
21                query := 'DELETE FROM ' || :NEW.typename
22                        || ' WHERE gml_id = ''' || gml_id || '''';
23                EXECUTE IMMEDIATE query;
24
25                query := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id
26                        || ''' OR beziehung_zu = ''' || gml_id || '''';
27                EXECUTE IMMEDIATE query;
28
29                dbms_output.put_line( 'Lösche gml_id '|| gml_id || ' in ' || :NEW.typename || ' und Beziehungen');
30
31        ELSE
32                -- Ersetzen eines Objektes
33                -- In der objekt-Tabelle sind bereits 2 Objekte vorhanden (alt und neu).
34                -- Die 2 DatensÀtze unterscheiden sich nur in ogc_fid und beginnt
35
36                -- beginnt-Wert des aktuellen Objektes ermitteln
37                -- RAISE NOTICE 'Suche beginnt von neuem gml_id % ', substr(:NEW.replacedBy, 1, 16);
38                begsql := 'SELECT max(beginnt) FROM ' || :NEW.typename || ' WHERE gml_id = ''' || substr(:NEW.replacedBy, 1, 16) || ''' AND endet IS NULL';
39                EXECUTE IMMEDIATE begsql INTO aktbeg;
40
41                -- Nur alte Objekte entfernen
42                query := 'DELETE FROM ' || :NEW.typename || ' WHERE gml_id = ''' || gml_id || ''' AND beginnt < ''' || aktbeg || '''';
43                EXECUTE IMMEDIATE query;
44
45                -- Tabelle alkis_beziehungen
46                IF gml_id <> substr(:NEW.replacedBy, 1, 16) THEN -- gml_id gleich
47                        -- replace mit ungleicher gml_id
48                        -- Falls dies vorkommt, die Function erweitern
49                        raise_application_error(-20100, gml_id || ': neue gml_id ' || :NEW.replacedBy || ' bei Replace in ' || :NEW.typename || '. alkis_beziehungen muss aktualisiert werden!');
50                -- ELSE
51                        -- Beziehungen des Objektes wurden redundant noch einmal eingetragen
52                        -- ToDo:         HIER sofort die Redundanzen zum aktuellen Objekt beseitigen.
53                        -- Workaround: Nach der Konvertierung werden im Post-Processing
54                        --             ALLE Redundanzen mit einem SQL-Statemant beseitigt.
55                --      RAISE NOTICE 'Ersetze gleiche gml_id % in %', gml_id, :NEW.typename;
56
57                -- ENTWURF ungetestet:
58                --query := 'DELETE FROM alkis_beziehungen AS bezalt
59                --      WHERE (bezalt.beziehung_von = ' || gml_id || ' OR bezalt.beziehung_zu = ' || gml_id ||')
60                --      AND EXISTS (SELECT ogc_fid FROM alkis_beziehungen AS bezneu
61                --              WHERE bezalt.beziehung_von = bezneu.beziehung_von
62                --              AND bezalt.beziehung_zu = bezneu.beziehung_zu
63                --              AND bezalt.beziehungsart = bezneu.beziehungsart
64                --              AND bezalt.ogc_fid < bezneu.ogc_fid);'
65                --EXECUTE query;
66
67                END IF;
68        END IF;
69
70        :NEW.ignored := 'false';
71END delete_feature_trigger;
72/
73
74-- show errors trigger delete_feature_trigger;
75
76QUIT;
77
Note: See TracBrowser for help on using the repository browser.