ich bin auf der Suche nach einer Möglichkeit, nach einem update, insert oder delet externe Programme(jave) zu verständigen, dass es neue Daten gibt.
Als erstes dachte ich an einen Trigger. Ich möchte gerne eine Methode eines Java-Programs aufrufen, um diesem mitzuteilen, dass es neue Daten zu laden gibt.
Ein ständiges laden der Tabellen und anschließend im Programm zu vergelichen ob es Änderungen gibt ist kein Lösungsansatz für mich.
Ist es Möglich mit einem Trigger ein Programm zu verständigen? Fallen euch bessere Möglickeiten dazu ein?
Ich verwende die Version 9.4
Neben Listen/Nofify, schon genannt, ginge evtl. auch eine Art ‘Jobtabelle’, die Du via Trigger füllst und aus Deiner anderen Software zyklisch abfragst. Aber Listen&Notify ist eigentlich genau dafür gedacht.
ich würde hier akretschmer Recht geben und finde die Lösung auch nicht so optimal.
Auch hat man hier ja dann das Problem, dass man nochmal ne Komponente mit rein nimmt, was unter Umständen das ganze unnötig komplex und Fehleranfällig macht.
Von der möglichen Performanceproblematik mal abgesehen, die bei einem Trigger ja früher oder später oft auftauchen. Je nachdem wie oft die Daten da angepasst werden. Bei 2-3 Aktualisierungen die Minute, ist das natürlich eher Wurscht.
Mein Vorschlag:
Eine Statustabelle, welche den Tabellennamen und ein Boolean enthält. Die Anwendung prüft hier den Boolean zu der Tabelle. Ist dieser True sind neue Daten vorhanden und müssen neu eingelesen werden. Sobald die Anwendung das mitbekommt, setzt Sie das Feld auf False und liest ein. Falls so in der Zwischenzeit neue Daten kommen, wird das Feld wenigstens direkt wieder auf True gesetzt und es geht nix verloren.
Um das Feld auf True zu setzen, würde ich sagen, kann der Trigger gesetzt werden, der dann prüft, ob das Feld auf True steht und ggf. korrigiert. Hat man immer noch das eventuelle Performancethema, aber es sind wenigstens keine großen Dritt-Funktionen beteiligt.
Alternativ könnte auch einfach der Mechanismus, welcher da die Daten manipuliert das Feld anpassen, wenn der Commit durch ist. So ist auch gleich sichergestellt, dass die Daten nur dann neu eingelesen werden, wenn da auch wirklich alles sicher drin ist.
Am elegantesten ist hier aber am Ende die LISTEN/NOTIFY-Variante und die würde ich, wenn ich schon in Java arbeiten muss und das ganze “nativ” vom Treiber unterstützt, auch nutzen.