Changeset 211


Ignore:
Timestamp:
01/27/13 16:43:12 (11 years ago)
Author:
j.e.fischer
Message:

Verbesserungen am Löschtrigger

Location:
trunk/data/konvert/postnas_0.7
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/konvert/postnas_0.7/alkis-functions.sql

    r210 r211  
    314314                        || ' AND endet IS NULL' 
    315315                        INTO beginnt; 
     316        END IF; 
     317 
     318        IF beginnt IS NULL THEN 
     319                IF NEW.context = 'delete' OR NEW.safetoignore = 'true' THEN 
     320                        RAISE NOTICE 'Kein Beginndatum fuer Objekt % gefunden - ignoriert.', alt_id; 
     321                        NEW.ignored := true; 
     322                        RETURN NEW; 
     323                ELSE 
     324                        RAISE EXCEPTION 'Kein Beginndatum fuer Objekt % gefunden.', alt_id; 
     325                END IF; 
    316326        END IF; 
    317327 
     
    356366                                INTO endete; 
    357367                END IF; 
     368 
     369                IF alt_id<>neu_id THEN 
     370                        RAISE NOTICE 'Objekt % wird durch Objekt % ersetzt.', alt_id, neu_id; 
     371                END IF; 
     372 
     373                IF endete IS NULL THEN 
     374                        RAISE NOTICE 'Kein Beginndatum fuer Objekt % gefunden.', neu_id; 
     375                END IF; 
     376 
     377                IF endete IS NULL OR beginnt=endete THEN 
     378                        RAISE EXCEPTION 'Objekt % wird durch Objekt % ersetzt (leere Lebensdauer?).', alt_id, neu_id; 
     379                END IF; 
    358380        ELSE 
    359381                RAISE EXCEPTION '%: UngÃŒltiger Kontext % (''delete'' oder ''replace'' erwartet).', NEW.featureid, NEW.context; 
    360         END IF; 
    361  
    362         IF alt_id<>neu_id THEN 
    363                 RAISE NOTICE 'Objekt % wird durch Objekt % ersetzt.', alt_id, neu_id; 
    364         END IF; 
    365  
    366         IF beginnt IS NULL THEN 
    367                 RAISE NOTICE 'Kein Beginndatum fuer Objekt % gefunden.', alt_id; 
    368         END IF; 
    369  
    370         IF endete IS NULL THEN 
    371                 RAISE NOTICE 'Kein Beginndatum fuer Objekt % gefunden.', neu_id; 
    372         END IF; 
    373  
    374         IF beginnt IS NULL OR endete IS NULL OR beginnt=endete THEN 
    375                 RAISE EXCEPTION 'Objekt % wird durch Objekt % ersetzt (leere Lebensdauer?).', alt_id, neu_id; 
    376382        END IF; 
    377383 
     
    396402 
    397403                        IF NOT endete IS NULL THEN 
    398                                 RAISE NOTICE '%: Objekte bereits % ungegegangen - ignoriert', NEW.featureid, endete; 
     404                                RAISE NOTICE '%: Objekt bereits % untergegangen - ignoriert', NEW.featureid, endete; 
    399405                        ELSE 
    400406                                RAISE NOTICE '%: Objekt nicht gefunden - ignoriert', NEW.featureid; 
  • trunk/data/konvert/postnas_0.7/alkis-trigger-hist-oracle.sql

    r210 r211  
    9090        END IF; 
    9191 
     92        IF beginnt IS NULL THEN 
     93                IF :NEW.context = 'delete' OR :NEW.safetoignore = 'true' THEN 
     94                        dbms_output.put_line('Kein Beginndatum fuer Objekt ' || alt_id || ' gefunden.'); 
     95                        :NEW.ignored := 'true'; 
     96                        RETURN; 
     97                ELSE 
     98                        raise_application_error(-20100, 'Kein Beginndatum fuer Objekt ' || alt_id || ' gefunden.'); 
     99                END IF; 
     100        END IF; 
     101 
    92102        IF :NEW.context='delete' THEN 
    93103                SELECT to_char(sysdate, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') INTO endete FROM dual; 
     
    130140                                INTO endete; 
    131141                END IF; 
     142 
     143                IF alt_id<>neu_id THEN 
     144                        dbms_output.put_line('Objekt ' || alt_id || ' wird durch Objekt ' || neu_id || ' ersetzt.'); 
     145                END IF; 
     146 
     147                IF endete IS NULL THEN 
     148                        dbms_output.put_line('Kein Beginndatum fuer Objekt ' || neu_id || '.'); 
     149                END IF; 
     150 
     151                IF endete IS NULL OR beginnt=endete THEN 
     152                        raise_application_error(-20100, 'Objekt ' || alt_id || ' wird durch Objekt ' || neu_id || ' ersetzt (leere Lebensdauer?).'); 
     153                END IF; 
    132154        ELSE 
    133155                raise_application_error(-20100, :NEW.featureid || ': UngÃŒltiger Kontext ' || :NEW.context || '''delete'' oder ''replace'' erwartet).'); 
    134         END IF; 
    135  
    136         IF alt_id<>neu_id THEN 
    137                 dbms_output.put_line('Objekt ' || alt_id || ' wird durch Objekt ' || neu_id || ' ersetzt.'); 
    138         END IF; 
    139  
    140         IF beginnt IS NULL THEN 
    141                 dbms_output.put_line('Kein Beginndatum fuer Objekt ' || alt_id || '.'); 
    142         END IF; 
    143  
    144         IF endete IS NULL THEN 
    145                 dbms_output.put_line('Kein Beginndatum fuer Objekt ' || neu_id || '.'); 
    146         END IF; 
    147  
    148         IF beginnt IS NULL OR endete IS NULL OR beginnt=endete THEN 
    149                 raise_application_error(-20100, 'Objekt ' || alt_id || ' wird durch Objekt ' || neu_id || ' ersetzt (leere Lebensdauer?).'); 
    150156        END IF; 
    151157 
     
    163169                        :NEW.ignored := 'true'; 
    164170                        RETURN; 
     171                ELSIF n=0 THEN 
     172                        EXECUTE IMMEDIATE 'SELECT endet FROM ' || :NEW.typename || 
     173                                ' WHERE gml_id=''' || alt_id || '''' || 
     174                                ' AND beginnt=''' || beginnt || '''' 
     175                                INTO endete; 
     176 
     177                        IF NOT endete IS NULL THEN 
     178                                dbms_output.put_line( :NEW.featureid || ': Objekt bereits ' || endete || ' untergegangen - ignoriert' ); 
     179                        ELSE 
     180                                dbms_output.put_line( :NEW.featureid || ': Objekt nicht gefunden - ignoriert' ); 
     181                        END IF; 
     182 
     183                        :NEW.ignored := 'true'; 
     184                        RETURN; 
    165185                ELSE 
    166186                        raise_application_error(-20100, :NEW.featureid || ': Untergangsdatum von ' || n || ' Objekten statt nur einem auf ' || endete || ' gesetzt - Abbruch' ); 
     
    169189 
    170190        :NEW.ignored := 'false'; 
    171         RETURN; 
    172191END delete_feature_trigger; 
    173192/ 
Note: See TracChangeset for help on using the changeset viewer.