Verwenden Sie einen ON INSERT-Trigger.
Sie müssen nach Einzelheiten darüber suchen, wie Sie externe Anwendungen mit den Werten aufrufen, die im eingefügten Datensatz enthalten sind, oder Sie schreiben Ihre 'Anwendung' als SQL-Prozedur und lassen sie in der Datenbank laufen.
Es klingt, als würden Sie Datenbanken im Allgemeinen auffrischen wollen, bevor Sie sich mit Ihren Befehlszeilenansätzen in eine Ecke malen.
Ich bin nicht sicher, aber das könnte für primitive / flache Datei-Datenbanken funktionieren, aber soweit ich verstehe (und ich könnte falsch liegen), sind die modernen Datenbank-Dateien verschlüsselt. Daher würde das Lesen einer neu hinzugefügten Zeile mit diesem Befehl nicht funktionieren.
Ich könnte mir vorstellen, dass die meisten Datenbanken Schreibtrigger zulassen, und Sie könnten ein Skript haben, das beim Schreiben auslöst und Ihnen etwas von dem, was passiert ist, mitteilt. Ich weiß nicht, welche Informationen verfügbar wären, da dies von der einzelnen Datenbank abhängen würde.
Hier gibt es ein paar Optionen, von denen einige andere bemerkt haben:
Ich habe ausführlich darüber gebloggt, wie man all diese Möglichkeiten mit Postgres in Ссылка macht.
tail
unter Linux scheint inotify
zu verwenden, um zu sagen, wenn sich eine Datei ändert - wahrscheinlich verwendet sie ähnliche Dateisystembenachrichtigungs-Frameworks auf anderen Betriebssystemen. Daher erkennt es Dateiänderungen.
Das heißt, tail
führt nach jeder gefundenen Änderung einen fstat()
Aufruf durch und gibt nichts aus, wenn die Datei nicht größer wird. Moderne DB-Systeme verwenden zufälligen Dateizugriff und verwenden DB-Seiten erneut, so dass es sehr wahrscheinlich ist, dass eine eingefügte Zeile nicht dazu führt, dass sich die Größe der Backing-Datei ändert.
Sie verwenden inotify
(oder Ähnliches) besser direkt und sogar noch besser, wenn Sie DB-Trigger oder einen anderen Mechanismus verwenden, den Ihr DBMS DB-Updates bietet, da nicht alle Dateiupdates notwendigerweise Zeileneinfügevorgänge sind / p>
Ich war gerade mitten in der Veröffentlichung der gleichen genauen Antwort wie Glowcoder, plus eine andere Idee:
Die Low-Tech-Methode besteht darin, ein Timestamp-Feld zu verwenden und ein Programm jede Abfrage nach n Minuten auszuführen, um nach Datensätzen zu suchen, deren Timestamp größer ist als der letzte Durchlauf. Das gleiche Konzept kann durch Speichern des letzten Schlüssels, der gesehen wird, wenn Sie eine Sequenz verwenden, oder sogar durch Hinzufügen eines booleschen Feldes "verarbeite" erreicht werden.
Mit Oracle können Sie eine Pseudo-Spalte namens "rowid" auswählen, die eine eindeutige Kennung für die Zeile in der Tabelle angibt, und rowid's sind ordinal ... neuen Zeilen werden roweids zugewiesen, die größer sind als alle vorhandenen rowids.
Wählen Sie also zuerst max (rowid) aus table_name
Ich nehme an, dass eine Ursache für die aufgeworfene Frage darin besteht, dass es viele, viele Zeilen in der Tabelle gibt ... also wird dieser erste Schritt die DB ein wenig besteuern und etwas dauern.
Wählen Sie dann * aus table_name wo rowid & gt; "was auch immer_dieses_Routing_was_was"
Sie müssen die Abfrage immer noch regelmäßig ausführen, aber es ist jetzt nur eine schnelle und kostengünstige Abfrage
Tags und Links database