Erstellen eines bedingten SQL-Triggers in SQLite

9

Ich versuche einen Trigger für sqlite zu schreiben und laufe einfach auf alle möglichen Probleme ein. In Wahrheit denke ich, dass mein Problem mit meinem schlechten Hintergrund in der SQL-Sprache ist. Wie auch immer, hier geht es ...

Ich habe zwei Tabellen Table1 und Table2. Tabelle1 hat eine Spalte namens time (die eine 64-Bit-Integer-Zeit ist). Ich brauche einen Trigger, der darauf achtet, dass eine neue Zeile in Table1 eingefügt wird. Wenn in Tabelle 1 3 oder mehr Zeilen vorhanden sind, deren Zeit größer als X ist (ein fest codierter Wert im folgenden Beispiel 120 Sekunden), muss eine neue Zeile in Tabelle 2 eingefügt werden.

Hier ist, was ich bisher habe (beachten Sie, dass das nicht funktioniert)

%Vor%

Irgendeine Art Seelen da draußen, die in SQL besser sind als ich?

    
Jan Wikholm 29.06.2009, 20:01
quelle

3 Antworten

8

Dies funktioniert, weil die WHEN -Klausel einen Ausdruck benötigt:

%Vor%

Haben Sie sich diese Referenzseite angesehen? Soweit ich das beurteilen kann, handelt es sich um einen "Aggregatmissbrauch", der wahrscheinlich auf eine Aussage im Abschnitt When zurückzuführen ist. Du hattest das:

%Vor%

Ich habe versucht, " WHERE tCount " zu löschen, um es zu einem Ausdruck zu machen, aber dann bekam ich einen Syntaxfehler beim Operator .

Also habe ich stattdessen die obige Lösung geändert.

    
dlamblin 29.06.2009 20:06
quelle
1

Ihre WHEN-Klausel im Trigger sollte ein Vergleichsausdruck sein, der true oder false zurückgibt, anstatt eine Zahl zurückzugeben. Versuchen Sie dlamblin's Idee.

    
J. Polfer 29.06.2009 21:10
quelle
-5

Vielleicht ein anderer syntaktischer Ansatz?

%Vor%

Aber auch, versuchen Sie einige Debugging-Anweisungen. Als ich meinen letzten Auslöser für einen Webservice debugging, habe ich einige INSERT-Anweisungen in eine Debugging-Tabelle eingefügt, die ich eingerichtet habe. Also könnten Sie @timeNum jedes Mal ausgeben, wenn der Trigger aufgerufen wird, und dann ein weiteres Debug-INSERT in die Schleife einfügen, um zu sehen, ob Sie tatsächlich in Ihre Table2-INSERT-Logik kommen.

UPDATE: Es tut uns leid! Sieht so aus, als ob SqlLite irgendwie saugt, ich wusste nicht, dass es etwas von dieser Syntax fehlt. Wenn Sie jedoch keine Antworten erhalten, sollten Sie einige Debugging-Anweisungen in Betracht ziehen, um sicherzustellen, dass Ihre Code-Pfade unter den richtigen Bedingungen aufgerufen werden.

    
Bob 29.06.2009 20:19
quelle

Tags und Links