Trigger - Mehrere Tabellen involviert

Hallo Zusammen,

ein externes System macht Einträge in meine Datenbank - in 2 Tabellen (Tabelle A und Tabelle B). Die beiden Einträge stehen über eine eindeutige ID in Verbindung zueinander.

Jetzt habe ich einen Trigger, der auslöst, wenn ein neuer Eintrag in Tabelle A geschrieben wird. Der Trigger löst allerdings nur dann aus, wenn der Eintrag ein bestimmtes Attribut hat (welches nur in Tabelle A zur Verfügung steht). In Tabelle B steht diese Information nicht zur Verfügung, deshalb kann ich den Trigger leider nicht auslösen, wenn ein bestimmter Eintrag in Tabelle B erscheint.

Mein Trigger soll einen neuen Eintrag in eine neue Tabelle C schreiben. In diesen Eintrag soll der Trigger allerdings Informationen aus Tabelle B eintragen. Problem: Der Trigger läuft direkt nach dem neuen Eintrag in Tabelle A los und zu diesem Zeitpunkt ist in Tabelle B der korrespondierende Eintrag noch nicht vorhanden - dieser kommt erst 1 Sekunde später.

Ist dieses Problem zu lösen? Kann jemand helfen?

Evtl. muss ich in den Trigger eine Verzögerung einbauen, falls dies möglich ist. Ist aber nicht besonders schön.

Vielen Dank für eure Hilfe.

Viele Grüße
Oliver
 
Sofern Dein Problem auf Constraint-Violations fusst : Du kannst die Tabellen DEFERRED anlegen, damit werden alle Constraints erst bei COMMIT geprüft.

Sofern Du sowas wie ein ON-COMMIT-Trigger benötigst, solltest Du versuchen, die Logik nicht über Trigger abzufackeln, sondern eher den Insert über eine StoredProc.

Falls Du keinen Einfluss auf die INSERTs nehmen kannst, bleibt die entweder nur die Asynchronizität (externer Prozess nudelt periodisch über Deine Daten und sorgt für die Befüllung von C) oder der Ausweichschritt über ZWEI Trigger (A schreibt in C, B ergänzt bei Bedarf).

Generell solltest Du beachten, dass die Triggerausführung bei Oracle arschlangsam ist, und generell keine Prozesslogik in Trigger gehört.

Grüße
gore
 
Zurück