Ergebnis 1 bis 7 von 7

Thema: Trigger nacheinander starten

  1. #1
    BoOnOdY ist offline Benutzer
    Registriert seit
    15.07.2006
    Beiträge
    72

    Standard Trigger nacheinander starten

    Hy,

    also ich schieß mal drauf los.

    Ich schreibe jeden Tag in eine Datenbank mehrere hundert einträge (alle auf einmal)
    In der werden alle daten in eine History Tabelle kopiert. und dann Trigger in der History Tabelle ausgeführt.

    Also

    Wenn Insert in tabelle1 schießt trigger los und schreibt daten auch in tabelle 2


    In Tabelle 2 soll dann folgendes passieren.


    Before Insert
    1. Möchte alle Daten vom Vor Vortag löschen (die haben die Zeile alt vom Typ Boolean True und new.name=name)
    2. Möchte alle Daten vom Vortag (nach einem wochende halt vom Freitag)
    alt true setzen
    also
    update alt set alt=true
    where new.name=name )

    After Insert
    Da ist die Reihenfolge egal.


    Wie kann ich es anstellen, dass die Trigger genau in der von mir gewollten Reihenfolge abgeschossen werden?

    Außerdem habe ich noch ein Problem. Da er es nur einmal machen soll kann es kein Zeilentrigger sein, aber da ich eine new.* variable unabkömmlich verwende kann ich auch keinen statement trigger mit before verwenden... was soll ich tun?


    gruß BoOnOdY
    Geändert von BoOnOdY (06.08.2007 um 15:51 Uhr)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von BoOnOdY Beitrag anzeigen
    Hy,


    Before Insert
    1. Möchte alle Daten vom Vor Vortag löschen (die heißen bool alt true)
    2.Möchte die Daten vom Vortag (nach einem wochende halt vom Freitag)
    alt true setzen
    After Insert
    Da ist die Reihenfolge egal.


    Wie kann ich es anstellen, dass die Trigger genau in der von mir gewollten Reihenfolge abgeschossen werden?
    Trigger werden alphabetisch sortiert ausgeführt. Nenne sie also z.B. trigger_01, trigger_02, ... um sie in dieser Reihenfolge abarbeiten zu lassen.

    Aber warum die Mimik mit dem Flag setzen? Du hast doch bestimmt einen Timestamp bei den Daten, und was älter als N Tage ist ist somit berechenbar.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Wenn du das alles auf einmal schreibst, pack die alle in eine einzelne Transaktion. Für Trigger gibt es sowohl Row-basierte wie Statement-basierte Trigger ... und du suchst dann sicherlich letzteres.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    BoOnOdY ist offline Benutzer
    Registriert seit
    15.07.2006
    Beiträge
    72

    Standard

    Okay das ist schon mal hilfreich.

    Ja Timestamp natürlich, aber es kann auch mal sein, das ich einen Monat keine Daten mit dem Namen importiere.

    Deswegen will ich alle löschen die den Namen haben und auf alt gestellt sind
    und dann die vorhandenen daten mit dem namen auf alt stellen

    aber das ist ja ein "before" trigger.

    Da hab ich ja das Problem, dass ich kein new.* variablen benutzen kann.

    Mir fällt keine Lösung ein wie ich das sonst machen könnte, außer ganz umständlich, dass ich den namen "select distinct" nehme und dann order by timestamp uns das dann lösche. dann könnte ich das mit nem after mache. Also:

    delete from tabelle
    where timestamp=(select distinct (name) timestamp
    where name=new.name
    order by timestamp) and name=new.name

    aber das is mir zu doof, ich will die new.* variable auch in nem before trigger haben.

    Kann ich irgendwie sagen, dass der Trigger nur einmal abgefeuert wird? Weil wenn ich 200 Zeilen importiere, dann muss ich den trigger ja pro zeile laufen lassen und müsste den entsprechend umformulieren. Aber ich würd den gerne nur ein ma abschießen
    Ist das der Statement trigger?



    Vielen Dank und Gruß

    BoOnOdY

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Klar gibt es (in deinem Insert Query) die 'new' Daten ... warum sollten die nicht da sein? Zur Not übergibst du diese Daten an eine weitere Funktion, die die Arbeit erledigt.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #6
    BoOnOdY ist offline Benutzer
    Registriert seit
    15.07.2006
    Beiträge
    72

    Standard

    ja funktion sowieso aber ich würd die funktion halt gerne mit nem trigger anstoßen.

    Ist dieser "Statement" trigger einer, der nur einmal pro speichern (commit) läuft oder ?

    Im Notfall muss ich das irgendwie in das Script einbauen, das den Import übernimmt.

    Aber tausend Dank schon mal =)

    Gruß BoOnOdY

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Zitat Zitat von BoOnOdY Beitrag anzeigen
    Ist dieser "Statement" trigger einer, der nur einmal pro speichern (commit) läuft oder ?
    Da verweise ich doch mal knallhart auf die Doku.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Ähnliche Themen

  1. Server starten und stoppen
    Von lars.p im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 24.11.2011, 15:04
  2. UPDATE Trigger oder INSERT Trigger
    Von traxanos im Forum Trigger und Funktionen
    Antworten: 8
    Letzter Beitrag: 18.05.2010, 12:59
  3. SQL Skript automatisch starten
    Von Jones1024 im Forum SQL
    Antworten: 7
    Letzter Beitrag: 12.08.2008, 21:29
  4. Frage Kann ein Trigger ein Script starten?
    Von ricos im Forum Programmierung
    Antworten: 1
    Letzter Beitrag: 30.07.2008, 11:56
  5. PostgreSql mit Batch-File starten
    Von Phantasmagorium im Forum Konfiguration
    Antworten: 1
    Letzter Beitrag: 27.03.2008, 03:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum