source: trunk/data/konvert/trigger_unique_id.sql @ 121

Revision 121, 1.4 KB checked in by ralf.suhr, 12 years ago (diff)

allgemeiner Trigger für alle Tabellen außer alkis_beziehungen für Eindeutigkeit (gml_id,beginnt, endet cd "printf "%b" 0057home0057itc0930057Projekts0057KomGIS0057Server0057komgis0055updates0056itc0057var0057www0057private"

Line 
1-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2--
3-- unique_id - Eindeutigkeit von "gml_id", "beginnt" und "endet"
4--             sicherstellen und Historie auf Basis der gml_id pflegen
5--
6-- Fr. Nov 4 2011 ralf dot suhr at itc-halle dot de
7--
8-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9
10
11SET client_encoding = 'UTF-8';
12
13
14CREATE OR REPLACE FUNCTION public.unique_id()
15  RETURNS TRIGGER AS
16$$
17DECLARE
18  _test       boolean;
19BEGIN
20
21  IF NEW.gml_id IS NULL THEN
22    RAISE NOTICE 'Leere gml_id in % abgelehnt', TG_RELNAME;
23    RETURN NULL;
24  END IF;
25
26  -- doppelte DatensÀtze vermeiden (auch NBA)
27  FOR _test IN EXECUTE '
28      SELECT TRUE
29      FROM public.' || TG_RELNAME || '
30      WHERE gml_id = ''' || substr(NEW.gml_id, 1 , 16) || ''' AND
31        beginnt = ''' || NEW.beginnt || ''' AND
32        endet IS NULL
33      LIMIT 1' LOOP
34    -- Abarbeitung beenden
35    RETURN NULL;
36  END LOOP;
37
38  -- auf NBA Update testen
39  IF char_length(NEW.gml_id) > 18 THEN
40    NEW.gml_id := substr(NEW.gml_id, 1 , 16);
41    -- abgelaufenen Datensatz markieren (Enddatum setzen)
42    EXECUTE 'UPDATE public.' || TG_RELNAME || ' SET endet = ''' || NEW.beginnt || '''
43      WHERE gml_id = ''' || NEW.gml_id || ''' AND endet IS NULL';
44  END IF;
45
46  -- Lebenszeitintervall nachtragen (ATKIS)
47  IF NEW.beginnt IS NULL THEN
48    NEW.beginnt := NOW()::text;
49  END IF;
50
51  -- alles zurÃŒckgeben
52  RETURN NEW;
53END;
54$$
55LANGUAGE 'plpgsql';
Note: See TracBrowser for help on using the repository browser.