source: trunk/import/alkis-functions.sql @ 299

Revision 299, 51.2 KB checked in by frank.jaeger, 10 years ago (diff)

In Trigger-Function "update_fields_beziehungen" eine Fehlerbehandlung. Beim Anlagen der DB auch Sichten definieren.

RevLine 
[299]1-- alkis-functions.sql - Trigger-Funktionen fÃŒr die FortfÃŒhrung der
2--                       alkis_beziehungen aus EintrÀgen der delete-Tabelle
3
4-- 2013-07-10: Erweiterung zur Verarbeitung der Replace-SÀtze in ALKIS-Beziehungen
5
6-- 2013-12-10:  In der Function "update_fields_beziehungen" den Fall behandeln, dass ein Objekt einer
7--                              neuen Beziehung in keiner Tabelle gefunden wird.
8--                              Wenn ein einzelnes Objekt fehlt, soll dies keine Auswirkungen auf andere Objekte haben.
9--              FÃŒllen von "zu_typename" auskommentiert.
10
[190]11-- Table/View/Sequence löschen, wenn vorhanden
12CREATE OR REPLACE FUNCTION alkis_dropobject(t TEXT) RETURNS varchar AS $$
13DECLARE
14        c RECORD;
15        s varchar;
16        r varchar;
17        d varchar;
18        i integer;
19        tn varchar;
20BEGIN
21        r := '';
22        d := '';
23
24        -- drop objects
25        FOR c IN SELECT relkind,relname
26                FROM pg_class
27                JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid
28                WHERE pg_namespace.nspname='public' AND pg_class.relname=t
29                ORDER BY relkind
30        LOOP
31                IF c.relkind = 'v' THEN
32                        r := r || d || 'Sicht ' || c.relname || ' gelöscht.';
33                        EXECUTE 'DROP VIEW ' || c.relname || ' CASCADE';
34                ELSIF c.relkind = 'r' THEN
35                        r := r || d || 'Tabelle ' || c.relname || ' gelöscht.';
36                        EXECUTE 'DROP TABLE ' || c.relname || ' CASCADE';
37                ELSIF c.relkind = 'S' THEN
38                        r := r || d || 'Sequenz ' || c.relname || ' gelöscht.';
39                        EXECUTE 'DROP SEQUENCE ' || c.relname;
40                ELSIF c.relkind <> 'i' THEN
41                        r := r || d || 'Typ ' || c.table_type || '.' || c.table_name || ' unerwartet.';
42                END IF;
43                d := E'\n';
44        END LOOP;
45
46        FOR c IN SELECT indexname FROM pg_indexes WHERE schemaname='public' AND indexname=t
47        LOOP
48                r := r || d || 'Index ' || c.indexname || ' gelöscht.';
49                EXECUTE 'DROP INDEX ' || c.indexname;
50                d := E'\n';
51        END LOOP;
52
53        FOR c IN SELECT proname,proargtypes
54                FROM pg_proc
55                JOIN pg_namespace ON pg_proc.pronamespace=pg_namespace.oid
56                WHERE pg_namespace.nspname='public' AND pg_proc.proname=t
57        LOOP
58                r := r || d || 'Funktion ' || c.proname || ' gelöscht.';
59
60                s := 'DROP FUNCTION ' || c.proname || '(';
61                d := '';
62
63                FOR i IN array_lower(c.proargtypes,1)..array_upper(c.proargtypes,1) LOOP
64                        SELECT typname INTO tn FROM pg_type WHERE oid=c.proargtypes[i];
65                        s := s || d || tn;
66                        d := ',';
67                END LOOP;
68
69                s := s || ')';
70
71                EXECUTE s;
72
73                d := E'\n';
74        END LOOP;
75
76        FOR c IN SELECT relname,conname
77                FROM pg_constraint
78                JOIN pg_class ON pg_constraint.conrelid=pg_constraint.oid
79                JOIN pg_namespace ON pg_constraint.connamespace=pg_namespace.oid
80                WHERE pg_namespace.nspname='public' AND pg_constraint.conname=t
81        LOOP
82                r := r || d || 'Constraint ' || c.conname || ' von ' || c.relname || ' gelöscht.';
83                EXECUTE 'ALTER TABLE ' || c.relname || ' DROP CONSTRAINT ' || c.conname;
84                d := E'\n';
85        END LOOP;
86
87        RETURN r;
88END;
89$$ LANGUAGE plpgsql;
90
91-- Alle ALKIS-Tabellen löschen
92SELECT alkis_dropobject('alkis_drop');
93CREATE FUNCTION alkis_drop() RETURNS varchar AS $$
94DECLARE
95        c RECORD;
96        r VARCHAR;
97        d VARCHAR;
98BEGIN
99        r := '';
100        d := '';
101        -- drop tables & views
102        FOR c IN SELECT table_type,table_name FROM information_schema.tables WHERE table_schema='public' AND ( substr(table_name,1,3) IN ('ax_','ap_','ks_') OR table_name IN ('alkis_beziehungen','delete')) ORDER BY table_type DESC LOOP
103                IF c.table_type = 'VIEW' THEN
104                        r := r || d || 'Sicht ' || c.table_name || ' gelöscht.';
105                        EXECUTE 'DROP VIEW ' || c.table_name || ' CASCADE';
106                ELSIF c.table_type = 'BASE TABLE' THEN
107                        r := r || d || 'Tabelle ' || c.table_name || ' gelöscht.';
108                        EXECUTE 'DROP TABLE ' || c.table_name || ' CASCADE';
109                ELSE
110                        r := r || d || 'Typ ' || c.table_type || '.' || c.table_name || ' unerwartet.';
111                END IF;
112                d := E'\n';
113        END LOOP;
114
115        -- clean geometry_columns
116        DELETE FROM geometry_columns
117                WHERE f_table_schema='public'
118                AND ( substr(f_table_name,1,2) IN ('ax_','ap_','ks_')
119                 OR f_table_name IN ('alkis_beziehungen','delete') );
120
[192]121        RETURN r;
[190]122END;
123$$ LANGUAGE plpgsql;
124
125-- Alle ALKIS-Tabellen leeren
126SELECT alkis_dropobject('alkis_delete');
127CREATE FUNCTION alkis_delete() RETURNS varchar AS $$
128DECLARE
129        c RECORD;
130        r varchar;
131        d varchar;
132BEGIN
133        r := '';
134        d := '';
135
136        -- drop views
137        FOR c IN
138                SELECT table_name
139                FROM information_schema.tables
140                WHERE table_schema='public' AND table_type='BASE TABLE'
141                  AND ( substr(table_name,1,3) IN ('ax_','ap_','ks_')
142                        OR table_name IN ('alkis_beziehungen','delete') )
143        LOOP
144                r := r || d || c.table_name || ' wurde geleert.';
145                EXECUTE 'DELETE FROM '||c.table_name;
146                d := E'\n';
147        END LOOP;
148
149        RETURN r;
150END;
151$$ LANGUAGE plpgsql;
152
153-- Übersicht erzeugen, die alle alkis_beziehungen mit den Typen der beteiligen ALKIS-Objekte versieht
154SELECT alkis_dropobject('alkis_mviews');
155CREATE FUNCTION alkis_mviews() RETURNS varchar AS $$
156DECLARE
157        sql TEXT;
158        delim TEXT;
159        c RECORD;
160BEGIN
161        SELECT alkis_dropobject('vbeziehungen') INTO sql;
162        SELECT alkis_dropobject('vobjekte') INTO sql;
163
164        delim := '';
165        sql := 'CREATE VIEW vobjekte AS ';
166
167        FOR c IN SELECT table_name FROM information_schema.columns WHERE column_name='gml_id' AND substr(table_name,1,3) IN ('ax_','ap_','ks_') LOOP
168                sql := sql || delim || 'SELECT gml_id,beginnt,''' || c.table_name || ''' AS table_name FROM ' || c.table_name;
169                delim := ' UNION ';
170        END LOOP;
171
172        EXECUTE sql;
173
174--      CREATE UNIQUE INDEX vobjekte_gmlid ON vobjekte(gml_id,beginnt);
175--      CREATE INDEX vobjekte_table ON vobjekte(table_name);
176
177        CREATE VIEW vbeziehungen AS
178                SELECT  beziehung_von,(SELECT table_name FROM vobjekte WHERE gml_id=beziehung_von) AS typ_von
179                        ,beziehungsart
180                        ,beziehung_zu,(SELECT table_name FROM vobjekte WHERE gml_id=beziehung_zu) AS typ_zu
181                FROM alkis_beziehungen;
182
183--      CREATE INDEX vbeziehungen_von    ON vbeziehungen(beziehung_von);
184--      CREATE INDEX vbeziehungen_vontyp ON vbeziehungen(typ_von);
185--      CREATE INDEX vbeziehungen_art    ON vbeziehungen(beziehungsart);
186--      CREATE INDEX vbeziehungen_zu     ON vbeziehungen(beziehung_zu);
187--      CREATE INDEX vbeziehungen_zutyp  ON vbeziehungen(typ_zu);
188
189        RETURN 'ALKIS-Views erzeugt.';
190END;
191$$ LANGUAGE plpgsql;
192
193-- Indizes erzeugen
194SELECT alkis_dropobject('alkis_update_schema');
195CREATE FUNCTION alkis_update_schema() RETURNS varchar AS $$
196DECLARE
197        sql TEXT;
198        c RECORD;
199        i RECORD;
200        n INTEGER;
201BEGIN
202        -- Spalten in delete ergÀnzen
203        SELECT count(*) INTO n FROM information_schema.columns WHERE table_schema='public' AND table_name='delete' AND column_name='ignored';
204        IF n=0 THEN
205                ALTER TABLE "delete" ADD ignored BOOLEAN;
206        END IF;
207
208        SELECT count(*) INTO n FROM information_schema.columns WHERE table_schema='public' AND table_name='delete' AND column_name='context';
209        IF n=0 THEN
210                ALTER TABLE "delete" ADD context VARCHAR;
211        END IF;
212
213        SELECT count(*) INTO n FROM information_schema.columns WHERE table_schema='public' AND table_name='delete' AND column_name='safetoignore';
214        IF n=0 THEN
215                ALTER TABLE "delete" ADD safetoignore VARCHAR;
216        END IF;
217
218        SELECT count(*) INTO n FROM information_schema.columns WHERE table_schema='public' AND table_name='delete' AND column_name='replacedby';
219        IF n=0 THEN
220                ALTER TABLE "delete" ADD replacedBy VARCHAR;
221        END IF;
222
223        -- Spalte identifier ergÀnzen, wo sie fehlt
224        FOR c IN SELECT table_name FROM information_schema.columns a WHERE a.column_name='gml_id'
225                AND     EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='beginnt'    AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
226                AND NOT EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='identifier' AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
227        LOOP
228                EXECUTE 'ALTER TABLE ' || c.table_name || ' ADD identifier character(44)';
229        END LOOP;
230
231        -- Spalte endet ergÀnzen, wo sie fehlt
232        FOR c IN SELECT table_name FROM information_schema.columns a WHERE a.column_name='gml_id'
233                AND     EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='beginnt' AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
234                AND NOT EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='endet'   AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
235        LOOP
236                EXECUTE 'ALTER TABLE ' || c.table_name || ' ADD endet character(20) CHECK (endet>beginnt)';
237        END LOOP;
238
239        -- Lebensdauer-Constraint ergÀnzen
240        FOR c IN SELECT table_name FROM information_schema.columns a WHERE a.column_name='gml_id'
241                AND EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='beginnt' AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
242                AND EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='endet'   AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
243        LOOP
244                SELECT alkis_dropobject(c.table_name||'_lebensdauer');
245                EXECUTE 'ALTER TABLE ' || c.table_name || ' ADD CONSTRAINT ' || c.table_name || '_lebensdauer CHECK (beginnt IS NOT NULL AND endet>beginnt)';
246        END LOOP;
247
248        -- Indizes aktualisieren
249        FOR c IN SELECT table_name FROM information_schema.columns a WHERE a.column_name='gml_id'
250                AND EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='beginnt' AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
251        LOOP
252                -- Vorhandene Indizes droppen (TODO: Löscht auch die SonderfÀlle - entfernen)
253                FOR i IN EXECUTE 'SELECT indexname FROM pg_indexes WHERE NOT indexname LIKE ''%_pk'' AND schemaname=''public'' AND tablename='''||c.table_name||'''' LOOP
254                        EXECUTE 'DROP INDEX ' || i.indexname;
255                END LOOP;
256
257                -- Indizes erzeugen
258                EXECUTE 'CREATE UNIQUE INDEX ' || c.table_name || '_id ON ' || c.table_name || '(gml_id,beginnt)';
259                EXECUTE 'CREATE UNIQUE INDEX ' || c.table_name || '_ident ON ' || c.table_name || '(identifier)';
260                EXECUTE 'CREATE INDEX ' || c.table_name || '_gmlid ON ' || c.table_name || '(gml_id)';
261                EXECUTE 'CREATE INDEX ' || c.table_name || '_beginnt ON ' || c.table_name || '(beginnt)';
262                EXECUTE 'CREATE INDEX ' || c.table_name || '_endet ON ' || c.table_name || '(endet)';
263        END LOOP;
264
265        -- Geometrieindizes aktualisieren
266        FOR c IN SELECT table_name FROM information_schema.columns a WHERE a.column_name='gml_id'
267                AND EXISTS (SELECT * FROM information_schema.columns b WHERE b.column_name='wkb_geometry' AND a.table_catalog=b.table_catalog AND a.table_schema=b.table_schema AND a.table_name=b.table_name)
268        LOOP
269                EXECUTE 'CREATE INDEX ' || c.table_name || '_geom ON ' || c.table_name || ' USING GIST (wkb_geometry)';
270        END LOOP;
271
272        RETURN 'Schema aktualisiert.';
273END;
274$$ LANGUAGE plpgsql;
275
[192]276-- Im Trigger 'delete_feature_trigger' muss eine dieser beiden Funktionen
277-- (delete_feature_hist oder delete_feature_kill) verlinkt werden, je nachdem ob nur
278-- aktuelle oder auch historische Objekte in der Datenbank gefÃŒhrt werden sollen.
[190]279
280-- Löschsatz verarbeiten (MIT Historie)
281-- context='delete'        => "endet" auf aktuelle Zeit setzen
282-- context='replace'       => "endet" des ersetzten auf "beginnt" des neuen Objekts setzen
283CREATE OR REPLACE FUNCTION delete_feature_hist() RETURNS TRIGGER AS $$
284DECLARE
[299]285        sql TEXT;
286        gml_id TEXT;
[190]287        endete TEXT;
288        n INTEGER;
289BEGIN
290        NEW.context := lower(NEW.context);
[299]291        gml_id      := substr(NEW.featureid, 1, 16);
292
[190]293        IF NEW.context IS NULL THEN
294                NEW.context := 'delete';
295        END IF;
296
297        IF NEW.context='delete' THEN
298                endete := to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC','YYYY-MM-DD"T"HH24:MI:SS"Z"');
299
300        ELSIF NEW.context='replace' THEN
301                NEW.safetoignore := lower(NEW.safetoignore);
302
303                IF NEW.safetoignore IS NULL THEN
304                        RAISE EXCEPTION '%: safeToIgnore nicht gesetzt.', NEW.featureid;
305                ELSIF NEW.safetoignore<>'true' AND NEW.safetoignore<>'false' THEN
306                        RAISE EXCEPTION '%: safeToIgnore ''%'' ungÃŒltig (''true'' oder ''false'' erwartet).', NEW.featureid, NEW.safetoignore;
307                END IF;
308
[299]309                IF NEW.replacedBy IS NULL OR length(NEW.replacedBy)<16 THEN
310                        IF NEW.safetoignore = 'true' THEN
311                                RAISE NOTICE '%: Nachfolger ''%'' nicht richtig gesetzt - ignoriert', NEW.featureid, NEW.replacedBy;
312                                NEW.ignored := true;
313                                RETURN NEW;
314                        ELSE
315                                RAISE EXCEPTION '%: Nachfolger ''%'' nicht richtig gesetzt - Abbruch', NEW.featureid, NEW.replacedBy;
[192]316                        END IF;
[190]317                END IF;
318
[299]319                IF length(NEW.replacedBy)=16 THEN
320                        EXECUTE 'SELECT beginnt FROM ' || NEW.typename ||
321                                ' WHERE gml_id=''' || NEW.replacedBy || ''' AND endet IS NULL' ||
322                                ' ORDER BY beginnt DESC LIMIT 1'
323                           INTO endete;
324                ELSE
325                        -- replaceBy mit Timestamp
326                        EXECUTE 'SELECT beginnt FROM ' || NEW.typename ||
327                                ' WHERE identifier=''urn:adv:oid:' || NEW.replacedBy || ''''
328                           INTO endete;
329                        IF endete IS NULL THEN
330                                EXECUTE 'SELECT beginnt FROM ' || NEW.typename ||
331                                        ' WHERE gml_id=''' || substr(NEW.replacedBy,1,16) || ''' AND endet IS NULL' ||
332                                        ' ORDER BY beginnt DESC LIMIT 1'
333                                   INTO endete;
334                        END IF;
[190]335                END IF;
336
[211]337                IF endete IS NULL THEN
[299]338                        IF NEW.safetoignore = 'true' THEN
339                                RAISE NOTICE '%: Nachfolger % nicht gefunden - ignoriert', NEW.featureid, NEW.replacedBy;
340                                NEW.ignored := true;
341                                RETURN NEW;
342                        ELSE
343                                RAISE EXCEPTION '%: Nachfolger % nicht gefunden', NEW.featureid, NEW.replacedBy;
344                        END IF;
[211]345                END IF;
346        ELSE
347                RAISE EXCEPTION '%: UngÃŒltiger Kontext % (''delete'' oder ''replace'' erwartet).', NEW.featureid, NEW.context;
[210]348        END IF;
349
[299]350        sql     := 'UPDATE ' || NEW.typename
351                || ' SET endet=''' || endete || ''''
352                || ' WHERE gml_id=''' || gml_id || ''''
353                || ' AND endet IS NULL'
354                || ' AND beginnt<''' || endete || '''';
355        -- RAISE NOTICE 'SQL: %', sql;
356        EXECUTE sql;
[190]357        GET DIAGNOSTICS n = ROW_COUNT;
358        IF n<>1 THEN
[299]359                RAISE NOTICE 'SQL: %', sql;
[190]360                IF NEW.context = 'delete' OR NEW.safetoignore = 'true' THEN
[299]361                        RAISE NOTICE '%: Untergangsdatum von % Objekten statt nur einem auf % gesetzt - ignoriert', NEW.featureid, n, endete;
[190]362                        NEW.ignored := true;
363                        RETURN NEW;
364                ELSE
[299]365                        RAISE EXCEPTION '%: Untergangsdatum von % Objekten statt nur einem auf % gesetzt - Abbruch', NEW.featureid, n, endete;
[190]366                END IF;
367        END IF;
368
369        NEW.ignored := false;
370        RETURN NEW;
371END;
372$$ LANGUAGE plpgsql;
373
374
375-- Löschsatz verarbeiten (OHNE Historie)
376-- historische Objekte werden sofort gelöscht.
377-- Siehe Mail W. Jacobs vom 23.03.2012 in PostNAS-Mailingliste
378-- geaendert krz FJ 2012-10-31
[299]379-- geÀndertt krz FJ 2013-07-10 auf Vorschlag MB Krs. Unna
[190]380CREATE OR REPLACE FUNCTION delete_feature_kill() RETURNS TRIGGER AS $$
381DECLARE
382        query TEXT;
383        begsql TEXT;
384        aktbeg TEXT;
385        gml_id TEXT;
[299]386        query_bez TEXT; -- 2013-07-10 Erweiterung
[190]387BEGIN
388        NEW.typename := lower(NEW.typename);
389        NEW.context := lower(NEW.context);
390        gml_id      := substr(NEW.featureid, 1, 16);
391
392        IF NEW.context IS NULL THEN
393                NEW.context := 'delete';
394        END IF;
395
396        IF NEW.context='delete' THEN
397                -- ersatzloses Loeschen eines Objektes
398
399                query := 'DELETE FROM ' || NEW.typename
400                        || ' WHERE gml_id = ''' || gml_id || '''';
401                EXECUTE query;
402
403                query := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id
404                        || ''' OR beziehung_zu = ''' || gml_id || '''';
405                EXECUTE query;
406                RAISE NOTICE 'Lösche gml_id % in % und Beziehungen', gml_id, NEW.typename;
407
408        ELSE
[299]409                -- Ersetzen eines Objektes (Replace)
[190]410                -- In der objekt-Tabelle sind bereits 2 Objekte vorhanden (alt und neu).
411                -- Die 2 DatensÀtze unterscheiden sich nur in ogc_fid und beginnt
412
[192]413                -- beginnt-Wert des aktuellen Objektes ermitteln
[190]414                -- RAISE NOTICE 'Suche beginnt von neuem gml_id % ', substr(NEW.replacedBy, 1, 16);
415                begsql := 'SELECT max(beginnt) FROM ' || NEW.typename || ' WHERE gml_id = ''' || substr(NEW.replacedBy, 1, 16) || ''' AND endet IS NULL';
416                EXECUTE begsql INTO aktbeg;
417
418                -- Nur alte Objekte entfernen
[192]419                query := 'DELETE FROM ' || NEW.typename
[190]420                        || ' WHERE gml_id = ''' || gml_id || ''' AND beginnt < ''' || aktbeg || '''';
421                EXECUTE query;
422
[299]423                -- Tabelle "alkis_beziehungen"
424        -- Löschen der Beziehungen des in einer anderen Tabelle ersetzten Objektes.
[190]425                IF gml_id = substr(NEW.replacedBy, 1, 16) THEN -- gml_id gleich
426                        -- Beziehungen des Objektes wurden redundant noch einmal eingetragen
427                        -- ToDo:         HIER sofort die Redundanzen zum aktuellen Objekt beseitigen.
[192]428                        -- Workaround: Nach der Konvertierung werden im Post-Processing
[299]429                        --             ALLE Redundanzen mit einem SQL-Statement beseitigt.
[190]430                --      RAISE NOTICE 'Ersetze gleiche gml_id % in %', gml_id, NEW.typename;
431
[299]432                -- ENTWURF FJ, noch ungetestet:
433        -- Bei Replace wird zur aktuellen gml_id nach redundanten SÀtzen in alkis_beziehungen gesucht.
434        -- Die Version mit dem kleineren serial-Feld wird gelöscht.
[192]435                --query := 'DELETE FROM alkis_beziehungen AS bezalt
[190]436                --      WHERE (bezalt.beziehung_von = ' || gml_id || ' OR bezalt.beziehung_zu = ' || gml_id ||')
[192]437                --      AND EXISTS (SELECT ogc_fid FROM alkis_beziehungen AS bezneu
438                --              WHERE bezalt.beziehung_von = bezneu.beziehung_von
[190]439                --              AND bezalt.beziehung_zu = bezneu.beziehung_zu
440                --              AND bezalt.beziehungsart = bezneu.beziehungsart
441                --              AND bezalt.ogc_fid < bezneu.ogc_fid);'
442                --EXECUTE query;
443
[299]444                -- Funktioniert wahrscheinlich nicht wegen:
445                --   Der zu löschende Satz in "alkis_beziehungen" muss nicht komplett redandant sein (von+zu+art).
446        -- Es ist entweder ein Replace des von-objektes passiert oder ein Replace des zu-Objektes.
447                -- In beiden FÀllen kann auf der entgegen gesetzten Seite der Beziehung auch ein anderes Objekt sein.
448                -- Dummerweise sind die neuen Beziehungen mit der gleichen gml_id schon eingetragen worden.
449
450        -- 2013-07-10 Alternative Version von Marvon Brandt (Krs. Unna)
451        -- Diese Version setzt voraus, dass das Feld 'beginnt' beim EinfÃŒgen der Beziehung aus
452        -- dem Satz des von-Objektes kopiert wurde.
453        -- Dies geschieht in "update_fields_beziehungen" als Trigger beim EinfÃŒgen der alkis_beziehung.
454           -- alte Beziehungen löschen
455           query_bez := 'DELETE FROM alkis_beziehungen WHERE beziehung_von = ''' || gml_id 
456                        || ''' AND beginnt < ''' || aktbeg || '''';
457           RAISE NOTICE 'Lösche in beziehungen alte gml_id % vor %', gml_id, aktbeg;
458           EXECUTE query_bez;
459
460          -- Was ist, wenn das in der delete-Tabelle ersetzte Objekt nur/auch auf der zu-Seite der Beziehung auftaucht.
461          -- Hier wird es nur auf der von-Seite gesucht.
462 
463        -- 2013-07-10 Erweiterung Ende
464
[190]465                ELSE
466                        -- replace mit ungleicher gml_id
467                        -- Falls dies vorkommt, die Function erweitern
468                        RAISE EXCEPTION '%: neue gml_id % bei Replace in %. alkis_beziehungen muss aktualisiert werden!', gml_id, NEW.replacedBy, NEW.typename;
469                END IF;
470        END IF;
471
472        NEW.ignored := false;
473        RETURN NEW;
474END;
475$$ LANGUAGE plpgsql;
476
[192]477-- BeziehungssÀtze aufrÀumen
478CREATE OR REPLACE FUNCTION alkis_beziehung_inserted() RETURNS TRIGGER AS $$
479BEGIN
480        DELETE FROM alkis_beziehungen WHERE ogc_fid<NEW.ogc_fid AND beziehung_von=NEW.beziehung_von AND beziehungsart=NEW.beziehungsart AND beziehung_zu=NEW.beziehung_zu;
481        RETURN NEW;
482END;
483$$ LANGUAGE plpgsql;
[190]484
485-- Wenn die Datenbank MIT Historie angelegt wurde, kann nach dem Laden hiermit aufgerÀumt werden.
486CREATE OR REPLACE FUNCTION alkis_delete_all_endet() RETURNS void AS $$
487DECLARE
488        c RECORD;
489BEGIN
[192]490        -- In allen Tabellen die Objekte löschen, die ein Ende-Datum haben
[190]491        FOR c IN
492                SELECT table_name
493                FROM information_schema.columns a
494                WHERE a.column_name='endet'
495                ORDER BY table_name
496        LOOP
497                EXECUTE 'DELETE FROM ' || c.table_name || ' WHERE NOT endet IS NULL';
498                -- RAISE NOTICE 'Lösche ''endet'' in: %', c.table_name;
499        END LOOP;
500END;
501$$ LANGUAGE plpgsql;
[299]502
503
504-- 2013-07-10: Erweiterung zur Verarbeitung der Replace-SÀtze in ALKIS-Beziehungen
505
506-- ZusÀtzliche Felder fÌr alkis_beziehungen auswerten.
507-- In die Tabelle alkis_beziehungen wird zusÀtzlich zu den gml_ids der Objekte auf von- und zu-Seite
508-- auch noch eingetragen, aus welcher Tabelle die gml_id stammt. Dies sollte langfristig direkt
509-- vom PostNAS (ogr2ogr) gemacht werden so dass dieser Trigger als Provisorium anzusehen ist.
510
511-- Eventuell kann auch die Sammlung der bekannten Tabellen-Namen als Kette von UNION-Zeilen ersetzt werden
512-- durch eine smarte Function, die eine gefilterte Liste der vorhandenen Tabellen (-namen) durchsucht.
513-- Somit wÌrden auch solche Tabellen einbezogen, die von PostNAS nachtrÀglich angelegt wurden.
514
515-- Das Beginnt-Datum des Datensatzes auf der Seite "beziehung_von" wird zu der Beziehung kopiert (redundant).
516CREATE OR REPLACE FUNCTION update_fields_beziehungen() RETURNS TRIGGER AS $$
517DECLARE
518        sql_vonTypename TEXT;
519        sql_zuTypename TEXT;
520        sql_beginnt TEXT;
521BEGIN
522    -- Die folgende Liste von Tabellen-Namen kann reduziert werden, auf solche Tabellen, die auf
523    -- von-Seite von Beziehungen auftauchen können.
524    sql_vonTypename :=
525       'SELECT ''ap_darstellung'' FROM ap_darstellung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
526                SELECT ''ap_lpo'' FROM ap_lpo WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
527                SELECT ''ap_lto'' FROM ap_lto WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
528                SELECT ''ap_ppo'' FROM ap_ppo WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
529                SELECT ''ap_pto'' FROM ap_pto WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
530                SELECT ''ax_anderefestlegungnachwasserrecht'' FROM ax_anderefestlegungnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
531                SELECT ''ax_anschrift'' FROM ax_anschrift WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
532                SELECT ''ax_aufnahmepunkt'' FROM ax_aufnahmepunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
533                SELECT ''ax_bahnverkehr'' FROM ax_bahnverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
534                SELECT ''ax_bahnverkehrsanlage'' FROM ax_bahnverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
535                SELECT ''ax_baublock'' FROM ax_baublock WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
536                SELECT ''ax_bauraumoderbodenordnungsrecht'' FROM ax_bauraumoderbodenordnungsrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
537                SELECT ''ax_bauteil'' FROM ax_bauteil WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
538                SELECT ''ax_bauwerkimgewaesserbereich'' FROM ax_bauwerkimgewaesserbereich WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
539                SELECT ''ax_bauwerkimverkehrsbereich'' FROM ax_bauwerkimverkehrsbereich WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
540                SELECT ''ax_bauwerkoderanlagefuerindustrieundgewerbe'' FROM ax_bauwerkoderanlagefuerindustrieundgewerbe WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
541                SELECT ''ax_bauwerkoderanlagefuersportfreizeitunderholung'' FROM ax_bauwerkoderanlagefuersportfreizeitunderholung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
542                SELECT ''ax_bergbaubetrieb'' FROM ax_bergbaubetrieb WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
543                SELECT ''ax_besondereflurstuecksgrenze'' FROM ax_besondereflurstuecksgrenze WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
544                SELECT ''ax_besonderegebaeudelinie'' FROM ax_besonderegebaeudelinie WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
545                SELECT ''ax_besondererbauwerkspunkt'' FROM ax_besondererbauwerkspunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
546                SELECT ''ax_besonderergebaeudepunkt'' FROM ax_besonderergebaeudepunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
547                SELECT ''ax_besondererhoehenpunkt'' FROM ax_besondererhoehenpunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
548                SELECT ''ax_besonderertopographischerpunkt'' FROM ax_besonderertopographischerpunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
549                SELECT ''ax_bewertung'' FROM ax_bewertung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
550                SELECT ''ax_bodenschaetzung'' FROM ax_bodenschaetzung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
551                SELECT ''ax_boeschungkliff'' FROM ax_boeschungkliff WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
552                SELECT ''ax_boeschungsflaeche'' FROM ax_boeschungsflaeche WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
553                SELECT ''ax_buchungsblatt'' FROM ax_buchungsblatt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
554                SELECT ''ax_buchungsblattbezirk'' FROM ax_buchungsblattbezirk WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
555                SELECT ''ax_buchungsstelle'' FROM ax_buchungsstelle WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
556                SELECT ''ax_bundesland'' FROM ax_bundesland WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
557                SELECT ''ax_dammwalldeich'' FROM ax_dammwalldeich WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
558                SELECT ''ax_denkmalschutzrecht'' FROM ax_denkmalschutzrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
559                SELECT ''ax_dienststelle'' FROM ax_dienststelle WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
560                SELECT ''ax_duene'' FROM ax_duene WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
561                SELECT ''ax_einrichtungenfuerdenschiffsverkehr'' FROM ax_einrichtungenfuerdenschiffsverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
562                SELECT ''ax_einrichtunginoeffentlichenbereichen'' FROM ax_einrichtunginoeffentlichenbereichen WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
563                SELECT ''ax_felsenfelsblockfelsnadel'' FROM ax_felsenfelsblockfelsnadel WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
564                SELECT ''ax_firstlinie'' FROM ax_firstlinie WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
565                SELECT ''ax_flaechebesondererfunktionalerpraegung'' FROM ax_flaechebesondererfunktionalerpraegung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
566                SELECT ''ax_flaechegemischternutzung'' FROM ax_flaechegemischternutzung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
567                SELECT ''ax_fliessgewaesser'' FROM ax_fliessgewaesser WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
568                SELECT ''ax_flugverkehr'' FROM ax_flugverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
569                SELECT ''ax_flugverkehrsanlage'' FROM ax_flugverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
570                SELECT ''ax_flurstueck'' FROM ax_flurstueck WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
571                SELECT ''ax_forstrecht'' FROM ax_forstrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
572                SELECT ''ax_fortfuehrungsfall'' FROM ax_fortfuehrungsfall WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
573                SELECT ''ax_fortfuehrungsnachweisdeckblatt'' FROM ax_fortfuehrungsnachweisdeckblatt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
574                SELECT ''ax_friedhof'' FROM ax_friedhof WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
575                SELECT ''ax_gebaeude'' FROM ax_gebaeude WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
576                SELECT ''ax_gebaeudeausgestaltung'' FROM ax_gebaeudeausgestaltung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
577                SELECT ''ax_gehoelz'' FROM ax_gehoelz WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
578                SELECT ''ax_gelaendekante'' FROM ax_gelaendekante WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
579                SELECT ''ax_gemarkung'' FROM ax_gemarkung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
580                SELECT ''ax_gemarkungsteilflur'' FROM ax_gemarkungsteilflur WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
581                SELECT ''ax_gemeinde'' FROM ax_gemeinde WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
582                SELECT ''ax_gemeindeteil'' FROM ax_gemeindeteil WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
583                SELECT ''ax_georeferenziertegebaeudeadresse'' FROM ax_georeferenziertegebaeudeadresse WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
584                SELECT ''ax_gewaessermerkmal'' FROM ax_gewaessermerkmal WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
585                SELECT ''ax_gleis'' FROM ax_gleis WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
586                SELECT ''ax_grablochderbodenschaetzung'' FROM ax_grablochderbodenschaetzung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
587                SELECT ''ax_grenzpunkt'' FROM ax_grenzpunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
588                SELECT ''ax_hafenbecken'' FROM ax_hafenbecken WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
589                SELECT ''ax_halde'' FROM ax_halde WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
590                SELECT ''ax_heide'' FROM ax_heide WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
591                SELECT ''ax_heilquellegasquelle'' FROM ax_heilquellegasquelle WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
592                SELECT ''ax_historischesbauwerkoderhistorischeeinrichtung'' FROM ax_historischesbauwerkoderhistorischeeinrichtung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
593                SELECT ''ax_historischesflurstueck'' FROM ax_historischesflurstueck WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
594                SELECT ''ax_historischesflurstueckalb'' FROM ax_historischesflurstueckalb WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
595                SELECT ''ax_historischesflurstueckohneraumbezug'' FROM ax_historischesflurstueckohneraumbezug WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
596                SELECT ''ax_hoehenlinie'' FROM ax_hoehenlinie WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
597                SELECT ''ax_hoehleneingang'' FROM ax_hoehleneingang WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
598                SELECT ''ax_industrieundgewerbeflaeche'' FROM ax_industrieundgewerbeflaeche WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
599                SELECT ''ax_klassifizierungnachstrassenrecht'' FROM ax_klassifizierungnachstrassenrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
600                SELECT ''ax_klassifizierungnachwasserrecht'' FROM ax_klassifizierungnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
601                SELECT ''ax_kleinraeumigerlandschaftsteil'' FROM ax_kleinraeumigerlandschaftsteil WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
602                SELECT ''ax_kommunalesgebiet'' FROM ax_kommunalesgebiet WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
603                SELECT ''ax_kreisregion'' FROM ax_kreisregion WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
604                SELECT ''ax_lagebezeichnungkatalogeintrag'' FROM ax_lagebezeichnungkatalogeintrag WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
605                SELECT ''ax_lagebezeichnungmithausnummer'' FROM ax_lagebezeichnungmithausnummer WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
606                SELECT ''ax_lagebezeichnungmitpseudonummer'' FROM ax_lagebezeichnungmitpseudonummer WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
607                SELECT ''ax_lagebezeichnungohnehausnummer'' FROM ax_lagebezeichnungohnehausnummer WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
608                SELECT ''ax_landwirtschaft'' FROM ax_landwirtschaft WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
609                SELECT ''ax_leitung'' FROM ax_leitung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
610                SELECT ''ax_meer'' FROM ax_meer WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
611                SELECT ''ax_moor'' FROM ax_moor WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
612                SELECT ''ax_musterlandesmusterundvergleichsstueck'' FROM ax_musterlandesmusterundvergleichsstueck WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
613                SELECT ''ax_namensnummer'' FROM ax_namensnummer WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
614                SELECT ''ax_naturumweltoderbodenschutzrecht'' FROM ax_naturumweltoderbodenschutzrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
615                SELECT ''ax_person'' FROM ax_person WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
616                SELECT ''ax_platz'' FROM ax_platz WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
617                SELECT ''ax_punktkennunguntergegangen'' FROM ax_punktkennunguntergegangen WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
618                SELECT ''ax_punktortag'' FROM ax_punktortag WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
619                SELECT ''ax_punktortau'' FROM ax_punktortau WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
620                SELECT ''ax_punktortta'' FROM ax_punktortta WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
621                SELECT ''ax_regierungsbezirk'' FROM ax_regierungsbezirk WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
622                SELECT ''ax_reservierung'' FROM ax_reservierung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
623                SELECT ''ax_schifffahrtsliniefaehrverkehr'' FROM ax_schifffahrtsliniefaehrverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
624                SELECT ''ax_schiffsverkehr'' FROM ax_schiffsverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
625                SELECT ''ax_schutzgebietnachnaturumweltoderbodenschutzrecht'' FROM ax_schutzgebietnachnaturumweltoderbodenschutzrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
626                SELECT ''ax_schutzgebietnachwasserrecht'' FROM ax_schutzgebietnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
627                SELECT ''ax_schutzzone'' FROM ax_schutzzone WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
628                SELECT ''ax_seilbahnschwebebahn'' FROM ax_seilbahnschwebebahn WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
629                SELECT ''ax_sicherungspunkt'' FROM ax_sicherungspunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
630                SELECT ''ax_soll'' FROM ax_soll WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
631                SELECT ''ax_sonstigervermessungspunkt'' FROM ax_sonstigervermessungspunkt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
632                SELECT ''ax_sonstigesbauwerkodersonstigeeinrichtung'' FROM ax_sonstigesbauwerkodersonstigeeinrichtung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
633                SELECT ''ax_sonstigesrecht'' FROM ax_sonstigesrecht WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
634                SELECT ''ax_sportfreizeitunderholungsflaeche'' FROM ax_sportfreizeitunderholungsflaeche WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
635                SELECT ''ax_stehendesgewaesser'' FROM ax_stehendesgewaesser WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
636                SELECT ''ax_strassenverkehr'' FROM ax_strassenverkehr WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
637                SELECT ''ax_strassenverkehrsanlage'' FROM ax_strassenverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
638                SELECT ''ax_sumpf'' FROM ax_sumpf WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
639                SELECT ''ax_tagebaugrubesteinbruch'' FROM ax_tagebaugrubesteinbruch WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
640                SELECT ''ax_tagesabschnitt'' FROM ax_tagesabschnitt WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
641                SELECT ''ax_topographischelinie'' FROM ax_topographischelinie WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
642                SELECT ''ax_transportanlage'' FROM ax_transportanlage WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
643                SELECT ''ax_turm'' FROM ax_turm WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
644                SELECT ''ax_unlandvegetationsloseflaeche'' FROM ax_unlandvegetationsloseflaeche WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
645                SELECT ''ax_untergeordnetesgewaesser'' FROM ax_untergeordnetesgewaesser WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
646                SELECT ''ax_vegetationsmerkmal'' FROM ax_vegetationsmerkmal WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
647                SELECT ''ax_vertretung'' FROM ax_vertretung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
648                SELECT ''ax_verwaltung'' FROM ax_verwaltung WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
649                SELECT ''ax_verwaltungsgemeinschaft'' FROM ax_verwaltungsgemeinschaft WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
650                SELECT ''ax_vorratsbehaelterspeicherbauwerk'' FROM ax_vorratsbehaelterspeicherbauwerk WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
651                SELECT ''ax_wald'' FROM ax_wald WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
652                SELECT ''ax_wasserspiegelhoehe'' FROM ax_wasserspiegelhoehe WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
653                SELECT ''ax_weg'' FROM ax_weg WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
654                SELECT ''ax_wegpfadsteig'' FROM ax_wegpfadsteig WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
655                SELECT ''ax_wohnbauflaeche'' FROM ax_wohnbauflaeche WHERE gml_id = ''' || NEW.beziehung_von || ''' UNION
656                SELECT ''ax_wohnplatz'' FROM ax_wohnplatz WHERE gml_id = ''' || NEW.beziehung_von || '''';
657        EXECUTE sql_vonTypename INTO NEW.von_typename;
658
659        -- 2013-12-10: Den Fall behandeln, dass das Objekt in keiner Tabelle gefunden wird.
660        -- NULL-Wert fÃŒhrt zu Abbruch des 2. Execute. Dies fÃŒhrt in einer Kettenreaktion dazu,
661        -- dass auch weitere Objekte nicht eingefÃŒgt werden können.
662        IF NEW.von_typename IS NULL THEN
663                RAISE NOTICE 'Neue gml_id fuer "beziehung_von" in "alkis_beziehungen" ist keiner Tabelle zuzuordnen. "beziehung_von" und "beginnt" bleiben leer. gml_id: %', NEW.beziehung_von;
664        ELSE
665                -- Der von_typename (= Tabellen-Name) muss zuvor ermittelt worden sein. Dort wird nach der gml_id gesucht.
666                sql_beginnt := 'SELECT max(beginnt) FROM ' || NEW.von_typename || ' WHERE gml_id = ''' || NEW.beziehung_von ||'''';
667                EXECUTE sql_beginnt INTO NEW.beginnt;
668                -- Was passiert bei Replace eines Objektes, das nur auf der zu-Seite einer Beziehung auftaucht.
669        END IF;
670
671    -- Die folgende Liste von Tabellen-Namen kann reduziert werden, auf solche Tabellen, die auf
672    -- zu-Seite von Beziehungen auftauchen können.
673        -- Diese Spalte erleichtert die Analyse, wird aber nicht fÃŒr die aktuelle Version des Triggers nicht verwendet.
674    -- Diese Anweisung liefert nur teilweise ein Ergebnis.
675
676-- -- 2013-12-10 Wird nicht benötigt und ist auch nur teilweise erfolgreich.
677-- --            Dann den Aufwand sparen. Auskommentiert.
678--      sql_zuTypename :=
679--       'SELECT ''ap_darstellung'' FROM ap_darstellung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
680--              SELECT ''ap_lpo'' FROM ap_lpo WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
681--              SELECT ''ap_lto'' FROM ap_lto WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
682--              SELECT ''ap_ppo'' FROM ap_ppo WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
683--              SELECT ''ap_pto'' FROM ap_pto WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
684--              SELECT ''ax_anderefestlegungnachwasserrecht'' FROM ax_anderefestlegungnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
685--              SELECT ''ax_anschrift'' FROM ax_anschrift WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
686--              SELECT ''ax_aufnahmepunkt'' FROM ax_aufnahmepunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
687--              SELECT ''ax_bahnverkehr'' FROM ax_bahnverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
688--              SELECT ''ax_bahnverkehrsanlage'' FROM ax_bahnverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
689--              SELECT ''ax_baublock'' FROM ax_baublock WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
690--              SELECT ''ax_bauraumoderbodenordnungsrecht'' FROM ax_bauraumoderbodenordnungsrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
691--              SELECT ''ax_bauteil'' FROM ax_bauteil WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
692--              SELECT ''ax_bauwerkimgewaesserbereich'' FROM ax_bauwerkimgewaesserbereich WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
693--              SELECT ''ax_bauwerkimverkehrsbereich'' FROM ax_bauwerkimverkehrsbereich WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
694--              SELECT ''ax_bauwerkoderanlagefuerindustrieundgewerbe'' FROM ax_bauwerkoderanlagefuerindustrieundgewerbe WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
695--              SELECT ''ax_bauwerkoderanlagefuersportfreizeitunderholung'' FROM ax_bauwerkoderanlagefuersportfreizeitunderholung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
696--              SELECT ''ax_bergbaubetrieb'' FROM ax_bergbaubetrieb WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
697--              SELECT ''ax_besondereflurstuecksgrenze'' FROM ax_besondereflurstuecksgrenze WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
698--              SELECT ''ax_besonderegebaeudelinie'' FROM ax_besonderegebaeudelinie WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
699--              SELECT ''ax_besondererbauwerkspunkt'' FROM ax_besondererbauwerkspunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
700--              SELECT ''ax_besonderergebaeudepunkt'' FROM ax_besonderergebaeudepunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
701--              SELECT ''ax_besondererhoehenpunkt'' FROM ax_besondererhoehenpunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
702--              SELECT ''ax_besonderertopographischerpunkt'' FROM ax_besonderertopographischerpunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
703--              SELECT ''ax_bewertung'' FROM ax_bewertung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
704--              SELECT ''ax_bodenschaetzung'' FROM ax_bodenschaetzung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
705--              SELECT ''ax_boeschungkliff'' FROM ax_boeschungkliff WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
706--              SELECT ''ax_boeschungsflaeche'' FROM ax_boeschungsflaeche WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
707--              SELECT ''ax_buchungsblatt'' FROM ax_buchungsblatt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
708--              SELECT ''ax_buchungsblattbezirk'' FROM ax_buchungsblattbezirk WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
709--              SELECT ''ax_buchungsstelle'' FROM ax_buchungsstelle WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
710--              SELECT ''ax_bundesland'' FROM ax_bundesland WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
711--              SELECT ''ax_dammwalldeich'' FROM ax_dammwalldeich WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
712--              SELECT ''ax_denkmalschutzrecht'' FROM ax_denkmalschutzrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
713--              SELECT ''ax_dienststelle'' FROM ax_dienststelle WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
714--              SELECT ''ax_duene'' FROM ax_duene WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
715--              SELECT ''ax_einrichtungenfuerdenschiffsverkehr'' FROM ax_einrichtungenfuerdenschiffsverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
716--              SELECT ''ax_einrichtunginoeffentlichenbereichen'' FROM ax_einrichtunginoeffentlichenbereichen WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
717--              SELECT ''ax_felsenfelsblockfelsnadel'' FROM ax_felsenfelsblockfelsnadel WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
718--              SELECT ''ax_firstlinie'' FROM ax_firstlinie WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
719--              SELECT ''ax_flaechebesondererfunktionalerpraegung'' FROM ax_flaechebesondererfunktionalerpraegung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
720--              SELECT ''ax_flaechegemischternutzung'' FROM ax_flaechegemischternutzung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
721--              SELECT ''ax_fliessgewaesser'' FROM ax_fliessgewaesser WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
722--              SELECT ''ax_flugverkehr'' FROM ax_flugverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
723--              SELECT ''ax_flugverkehrsanlage'' FROM ax_flugverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
724--              SELECT ''ax_flurstueck'' FROM ax_flurstueck WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
725--              SELECT ''ax_forstrecht'' FROM ax_forstrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
726--              SELECT ''ax_fortfuehrungsfall'' FROM ax_fortfuehrungsfall WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
727--              SELECT ''ax_fortfuehrungsnachweisdeckblatt'' FROM ax_fortfuehrungsnachweisdeckblatt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
728--              SELECT ''ax_friedhof'' FROM ax_friedhof WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
729--              SELECT ''ax_gebaeude'' FROM ax_gebaeude WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
730--              SELECT ''ax_gebaeudeausgestaltung'' FROM ax_gebaeudeausgestaltung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
731--              SELECT ''ax_gehoelz'' FROM ax_gehoelz WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
732--              SELECT ''ax_gelaendekante'' FROM ax_gelaendekante WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
733--              SELECT ''ax_gemarkung'' FROM ax_gemarkung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
734--              SELECT ''ax_gemarkungsteilflur'' FROM ax_gemarkungsteilflur WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
735--              SELECT ''ax_gemeinde'' FROM ax_gemeinde WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
736--              SELECT ''ax_gemeindeteil'' FROM ax_gemeindeteil WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
737--              SELECT ''ax_georeferenziertegebaeudeadresse'' FROM ax_georeferenziertegebaeudeadresse WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
738--              SELECT ''ax_gewaessermerkmal'' FROM ax_gewaessermerkmal WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
739--              SELECT ''ax_gleis'' FROM ax_gleis WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
740--              SELECT ''ax_grablochderbodenschaetzung'' FROM ax_grablochderbodenschaetzung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
741--              SELECT ''ax_grenzpunkt'' FROM ax_grenzpunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
742--              SELECT ''ax_hafenbecken'' FROM ax_hafenbecken WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
743--              SELECT ''ax_halde'' FROM ax_halde WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
744--              SELECT ''ax_heide'' FROM ax_heide WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
745--              SELECT ''ax_heilquellegasquelle'' FROM ax_heilquellegasquelle WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
746--              SELECT ''ax_historischesbauwerkoderhistorischeeinrichtung'' FROM ax_historischesbauwerkoderhistorischeeinrichtung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
747--              SELECT ''ax_historischesflurstueck'' FROM ax_historischesflurstueck WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
748--              SELECT ''ax_historischesflurstueckalb'' FROM ax_historischesflurstueckalb WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
749--              SELECT ''ax_historischesflurstueckohneraumbezug'' FROM ax_historischesflurstueckohneraumbezug WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
750--              SELECT ''ax_hoehenlinie'' FROM ax_hoehenlinie WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
751--              SELECT ''ax_hoehleneingang'' FROM ax_hoehleneingang WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
752--              SELECT ''ax_industrieundgewerbeflaeche'' FROM ax_industrieundgewerbeflaeche WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
753--              SELECT ''ax_klassifizierungnachstrassenrecht'' FROM ax_klassifizierungnachstrassenrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
754--              SELECT ''ax_klassifizierungnachwasserrecht'' FROM ax_klassifizierungnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
755--              SELECT ''ax_kleinraeumigerlandschaftsteil'' FROM ax_kleinraeumigerlandschaftsteil WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
756--              SELECT ''ax_kommunalesgebiet'' FROM ax_kommunalesgebiet WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
757--              SELECT ''ax_kreisregion'' FROM ax_kreisregion WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
758--              SELECT ''ax_lagebezeichnungkatalogeintrag'' FROM ax_lagebezeichnungkatalogeintrag WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
759--              SELECT ''ax_lagebezeichnungmithausnummer'' FROM ax_lagebezeichnungmithausnummer WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
760--              SELECT ''ax_lagebezeichnungmitpseudonummer'' FROM ax_lagebezeichnungmitpseudonummer WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
761--              SELECT ''ax_lagebezeichnungohnehausnummer'' FROM ax_lagebezeichnungohnehausnummer WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
762--              SELECT ''ax_landwirtschaft'' FROM ax_landwirtschaft WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
763--              SELECT ''ax_leitung'' FROM ax_leitung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
764--              SELECT ''ax_meer'' FROM ax_meer WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
765--              SELECT ''ax_moor'' FROM ax_moor WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
766--              SELECT ''ax_musterlandesmusterundvergleichsstueck'' FROM ax_musterlandesmusterundvergleichsstueck WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
767--              SELECT ''ax_namensnummer'' FROM ax_namensnummer WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
768--              SELECT ''ax_naturumweltoderbodenschutzrecht'' FROM ax_naturumweltoderbodenschutzrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
769--              SELECT ''ax_person'' FROM ax_person WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
770--              SELECT ''ax_platz'' FROM ax_platz WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
771--              SELECT ''ax_punktkennunguntergegangen'' FROM ax_punktkennunguntergegangen WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
772--              SELECT ''ax_punktortag'' FROM ax_punktortag WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
773--              SELECT ''ax_punktortau'' FROM ax_punktortau WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
774--              SELECT ''ax_punktortta'' FROM ax_punktortta WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
775--              SELECT ''ax_regierungsbezirk'' FROM ax_regierungsbezirk WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
776--              SELECT ''ax_reservierung'' FROM ax_reservierung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
777--              SELECT ''ax_schifffahrtsliniefaehrverkehr'' FROM ax_schifffahrtsliniefaehrverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
778--              SELECT ''ax_schiffsverkehr'' FROM ax_schiffsverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
779--              SELECT ''ax_schutzgebietnachnaturumweltoderbodenschutzrecht'' FROM ax_schutzgebietnachnaturumweltoderbodenschutzrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
780--              SELECT ''ax_schutzgebietnachwasserrecht'' FROM ax_schutzgebietnachwasserrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
781--              SELECT ''ax_schutzzone'' FROM ax_schutzzone WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
782--              SELECT ''ax_seilbahnschwebebahn'' FROM ax_seilbahnschwebebahn WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
783--              SELECT ''ax_sicherungspunkt'' FROM ax_sicherungspunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
784--              SELECT ''ax_soll'' FROM ax_soll WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
785--              SELECT ''ax_sonstigervermessungspunkt'' FROM ax_sonstigervermessungspunkt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
786--              SELECT ''ax_sonstigesbauwerkodersonstigeeinrichtung'' FROM ax_sonstigesbauwerkodersonstigeeinrichtung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
787--              SELECT ''ax_sonstigesrecht'' FROM ax_sonstigesrecht WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
788--              SELECT ''ax_sportfreizeitunderholungsflaeche'' FROM ax_sportfreizeitunderholungsflaeche WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
789--              SELECT ''ax_stehendesgewaesser'' FROM ax_stehendesgewaesser WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
790--              SELECT ''ax_strassenverkehr'' FROM ax_strassenverkehr WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
791--              SELECT ''ax_strassenverkehrsanlage'' FROM ax_strassenverkehrsanlage WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
792--              SELECT ''ax_sumpf'' FROM ax_sumpf WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
793--              SELECT ''ax_tagebaugrubesteinbruch'' FROM ax_tagebaugrubesteinbruch WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
794--              SELECT ''ax_tagesabschnitt'' FROM ax_tagesabschnitt WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
795--              SELECT ''ax_topographischelinie'' FROM ax_topographischelinie WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
796--              SELECT ''ax_transportanlage'' FROM ax_transportanlage WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
797--              SELECT ''ax_turm'' FROM ax_turm WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
798--              SELECT ''ax_unlandvegetationsloseflaeche'' FROM ax_unlandvegetationsloseflaeche WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
799--              SELECT ''ax_untergeordnetesgewaesser'' FROM ax_untergeordnetesgewaesser WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
800--              SELECT ''ax_vegetationsmerkmal'' FROM ax_vegetationsmerkmal WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
801--              SELECT ''ax_vertretung'' FROM ax_vertretung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
802--              SELECT ''ax_verwaltung'' FROM ax_verwaltung WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
803--              SELECT ''ax_verwaltungsgemeinschaft'' FROM ax_verwaltungsgemeinschaft WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
804--              SELECT ''ax_vorratsbehaelterspeicherbauwerk'' FROM ax_vorratsbehaelterspeicherbauwerk WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
805--              SELECT ''ax_wald'' FROM ax_wald WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
806--              SELECT ''ax_wasserspiegelhoehe'' FROM ax_wasserspiegelhoehe WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
807--              SELECT ''ax_weg'' FROM ax_weg WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
808--              SELECT ''ax_wegpfadsteig'' FROM ax_wegpfadsteig WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
809--              SELECT ''ax_wohnbauflaeche'' FROM ax_wohnbauflaeche WHERE gml_id = ''' || NEW.beziehung_zu || ''' UNION
810--              SELECT ''ax_wohnplatz'' FROM ax_wohnplatz WHERE gml_id = ''' || NEW.beziehung_zu || '''';
811--      EXECUTE sql_zuTypename INTO NEW.zu_typename;
812-- -- 2013-12-10 Ende
813
814        RETURN NEW;
815END;
816$$ LANGUAGE plpgsql;
Note: See TracBrowser for help on using the repository browser.