Java Dynamische Datenbank für Fragebögen

Hallo hab mal noch eine Frage...
Und zwar versuch ich jetzt schon lange Trigger zu erstellen.
(Wollt die Daten immer updaten und der Trigger soll falls kein Eintrag existiert einen neuen erstellen)

CREATE TRIGGER "RF_Pat_insIfNotEx"
AFTER UPDATE ON Risikofaktor_Patient
FOR EACH ROW
begin atomic
if not exists(SELECT * FROM BLAH)
then
INSERT INTO BLAH;
end if;
end

Eclipse zeigt mir immer Fehler an unexpected end of statement (wenn ich Semikolons setze) und unexpected token: end (wenn ich die Semikolons nicht setze)

Eine Idee woran das liegt? Hat das was mit der hsqldb zu tun?

Andere Frage: Sollte ich lieber einen Trigger AFTER INSERT machen und dann Update falls es schon existiert?
 
Wieso Trigger? Weisst du was ein Trigger ist?

Wenn ich richtig verstanden habe, was du versuchst zu erreichen benötigst du merge. (Insert, wenn schon vorhanden Update).
 
Du musst den delimter/query terminator ändern.

Oder viel bessere idee, lass das mit dem trigger sein.
 
Okay bei der Merge-Anweisung klappt auf jeden Fall schonmal das Update, beim Insert kommt ein unique constraint or index violation Fehler, den ich mir noch angucken muss. Danke für den Tipp.

Bei meinem letzten Projekt hatten wir das über Trigger gelöst, hat auch alles geklappt.
 
Also ich bräuchte noch mal einen (hoffentlich letzten) Rat.

Erstens hat jemand Alternativen zu INSERT IGNORE bzw INSERT ON DUPLICATE KEY für eine HSQLDB?
So wie ich das verstanden habe gibt es das nicht bei HSQL. (Funktioniert auch nicht, schon ausprobiert^^)

Ich bräuchte nämlich etwas, dass keinen Fehler ausgibt wenn eine Frage mehrfach hintereinander nicht beantwortet wurde.

(Zur Erklärung: Es gibt eine extra Tabelle für unbekannte Antworten und da soll einfach, wenn ein Eintrag existiert, nix gemacht werden)


Zweitens funktioniert das mit dem MERGE nicht so recht.

MERGE INTO Risikofaktor_Patient
USING (SELECT 1 FROM Risikofaktor_Patient WHERE RF_ID = ? AND Patienten_ID = ? AND Inst_ID = ?)
ON (RF_ID = ? AND Patienten_ID = ? AND Inst_ID = ?)
WHEN MATCHED THEN UPDATE SET Wert_ID = ?, Datum = NOW()
WHEN NOT MATCHED THEN INSERT (RF_ID, Wert_ID, Inst_ID, Patienten_ID, Datum, Freitext) VALUES (?, ?, ?, ?, NOW(), ?)

Also wenn ein Eintrag besteht, erkennt die Anweisung das und ändert ihn auch. Existiert allerdings keiner, kommt zwar kein Fehler, es wird aber auch kein neuer Eintrag erstellt. Jemand ne Idee was da falsch dran ist?
Hab das mit dem (SELECT 1 FROM ...) im Internet gefunden, als beispiel wenn man nur eine Tabelle ansprechen will.

(Info: Die ? sind deshalb da, weil das zu einem PreparedStatement gehört)


Meine Ideen bisher dazu sind:
Für 1. es mit MySql versuchen, allerdings hab ich mir da gestern schon die Haare ausgerupft, weil ich die Anbindung zu Eclipse nicht hinbekommen habe. (besser wäre natürlich hier eine Alternative für HSQL)

Für 2. erstmal durch einen EXIST(SELECT.... zu erfahren ob die Daten existieren, und dann UPDATE und INSERT Statement getrennt zu machen (hab ich bisher auch nicht hinbekommen in Java eine Anweisung mit EXIST auszuwerten, hab mich allerdings auch noch nicht so intensiv damit beschäftigt)
ODER wieder eine Alternative für INSERT ... ON DUPLICATE KEY UPDATE zu finden, das sollte doch auch das Problem lösen?!


Ich bedanke mich jetzt schonmal bei allen, die hier mitgewirkt haben, bin fest der Überzeugung nach der Lösung der 2 Probleme hab ich's dann endlich geschafft :D
 
Zurück
Oben