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 | |
---|
11 | SET client_encoding = 'UTF-8'; |
---|
12 | |
---|
13 | |
---|
14 | CREATE OR REPLACE FUNCTION public.unique_id() |
---|
15 | RETURNS TRIGGER AS |
---|
16 | $$ |
---|
17 | DECLARE |
---|
18 | _test boolean; |
---|
19 | BEGIN |
---|
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; |
---|
53 | END; |
---|
54 | $$ |
---|
55 | LANGUAGE 'plpgsql'; |
---|
Note: See
TracBrowser
for help on using the repository browser.