Announcement

Collapse
No announcement yet.

Delete auf Tabelle mit Trigger?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delete auf Tabelle mit Trigger?

    Hallo Forum,

    ich bin in dem Umfeld relativ neu daher möchte ich mich gerne absichern ob das überhaupt sinn macht was ich mir da "erhirnt" habe

    Folgende Situation:
    Eine Tabelle als Schnittstelle zwischen 2 Anwendungen, die eine übergibt die Daten in die Tabelle die andere arbeitet dann damit.
    Allerdings schreibt die erste Application alle Informationen also auch Ihren eigenen Status in diese Tabelle.
    Die Tabelle heisst TOCAlog und die entscheidende Spalte ist die Spalte NAMEN, nur wenn in dieser Wert ungleich (null) ist werden die Daten gebraucht.
    Nachdem die Eintragung nicht customized werden kann, war die Überlegung nach einem Insert alle Datensätze die (null) im Namen enthalten zu löschen.
    Macht das so Sinn bzw. wie muss das Statement heissen?
    Mein Vorschlag *ungetestet da ich nicht blind drauf loslegen wollte*;
    Code:
    create trigger CKECK_TOCAlog
    after insert on TOCAlog
    FOR EACH STATEMENT
    Begin
     delete from TOCAlog where NAMEN is NULL;
    End
    Vielen Dank für eure Hilfe
    Micha
    Zuletzt editiert von mschlembach; 22.08.2008, 07:40.

  • #2
    Hi,

    grundsätzlich bin ich dagegen fachliche Logik in einen Trigger zu legen - genau das passiert hier. Du versteckst eine Bereinigungsaktion vor der eigentlichen Applikation.

    Das Statement ist grundsätzlich korrekt, aber mach dir auch bewußt, dass nach jedem Insert ein Full tablescan durchgeführt wird. Je nachdem wie groß die Tabelle ist, kann das natürlich dauern.

    Ich würde das so lösen, dass ich ber dbms_scheduler einen Bereinigungsjob Job anlege, der einmal wöchentlich/täglich/stündlich je nach dem läuft und die überflüssigen Einträge löscht. Sie stören nämlich erst mal nicht wenn Du das aus Performancegründen machst.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Hi Danke für die schnelle Antwort,

      und auch die super Erklärung, wäre folgendes dann korrekt?
      Das ganze ist eine Zeiterfassung über ein Biometrisches-Zugangssystem. Allerdings übergibt das System auch alle 10 Selunden seinen Status mit, diesen brauche ich aber nat. nicht für die Auswertungen, daher will ich die Tabelle immer wieder bereinigen. Allerdings lang es nat. das während den Geschäftszeiten zu tun da sonst sowieso niemand auf die Auswertungen zugreift. In der Auswertung selbst greife ich nur die Werte ab die ich brauche, von daher wäre das auch kein Problem.
      Code:
      CREATE OR REPLACE PROCEDURE DELL_NULL_TOCALOG
      IS
      BEGIN
        delete from TOCALOG where NAMEN is null;
      END;
      
      
      begin
        dbms_scheduler.create_job(
          job_name            => 'CHECK_TOCALOG',
          job_type            => 'stored_procedure',
          job_action          => 'DELL_NULL_TOCALOG',
          number_of_arguments => 0,
          start_date          => systimestamp,
          repeat_interval     => 'FREQ=MINUTELY; INTERVAL=30; BYHOUR=9,10,11,12,13,14,15,16,17; BYDAY=MON,TUE,WED,THU,FRI',
          end_date            => null,
          job_class           => 'DEFAULT_JOB_CLASS',
          enabled             => true,
          auto_drop           => true,
          comments            => null
        );
      end;

      Comment


      • #4
        Hi,

        das schaut gut aus. Nur fehlt noch das COMMIT in der Procedure das Deine Änderungen festschreibt.

        Anschauen ob der Job erfolgreich war, kannst dir dann in diversen Views:

        USER_SCHEDULER_JOBS
        USER_SCHEDULER_JOB_RUN_DETAILS
        USER_SCHEDULER_JOB_LOG


        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          *FG*

          Vielen Dank für die Hilfe und war ja klar das ich sowas wieder vergesse,
          ist ein langer Lernweg vom MSSQL Autocommit zum *zugegeben * sehr viel sinnvolleren commit-Zwang...

          Vielen Dank für die Weisung auf den richtigen Weg und die schnelle/nette Unterstützung.
          Micha

          Comment

          Working...
          X