PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Stored Procedure


AwesomeSauce
2011-05-19, 10:07:17
Guten Morgen zusammen

Ich weiss, dass meine Frage nicht wirklich ins "Programmierung"-Forum gehört, etwas passenderes habe ich jedoch nicht gefunden.

Ich arbeite an einem kleinen Projekt, bei dem embedded-Systeme übers Internet Daten an einen von mir geschriebenen Server senden, der diese Daten wiederum in einer MySQL Datenbank ablegt. Der Teil der Datenbank, auf den sich diese Frage bezieht, ist auf dem Bild im Anhang zu sehen.

Ein Dateneintrag in der entsprechenden Tabelle wird immer mit einem Zeitstempel versehen.

Nun möchte ich eine Stored Procedure schreiben, die periodisch (vielleicht alle 2 Stunden) diese Zeitstempel überprüft. Sobald eine gewisse Zeit seit dem letzten Empfang eines Datenpakets eines bestimmten Geräts vergangen ist, sagen wir 24 Stunden, sollte das entsprechende Gerät seinen Status auf "deaktiviert" ändern (Active = false).

Ich habe noch sehr wenig Erfahrung mit SQL-Statements und komme einfach auf keine Lösung für dieses Problem. Mir fehlen die Ansätze, mit deklarativen SQL-Statements dieses Problem zu lösen.

Ich hoffe, jemand mit mehr Erfahrung in diesem Bereich kann mir helfen.

Vielen Dank bereits im Voraus.

MFG AwesomeSauce

Matrix316
2011-05-19, 12:08:32
Gehts um die Stored procedure an sich oder um die SQL Abfragen?

Variablen deklarierste so:

Declare @Variable1 smalldatetime

Zuweisung wäre dann

set @Variable1 = (select Datum from Tabelle where ... )

Hol die letzten beiden Daten raus und vergleich dann

if datediff(hour,datum1,datum2) > 23
Begin
update tabelle set feld = active where ...
end

oder so halt

AwesomeSauce
2011-05-19, 14:03:17
Danke erstmal für die Antwort!

Naja, es geht eher ein bisschen um die Möglichkeiten von MySQL, bzw. um die Funktionen, die es anbietet.

Grundsätzlich möchte ich für jedes aktive Device:

1. Herausfinden, in welchen Messtabellen ein bestimmtes Device überhaupt vorkommt (dafür habe ich eine Tabelle, sollte also kein Problem sein)

2. In jeder Messtabelle, in der dieses Device vorkommt, den Zeitpunkt des letzten Datenpakets von diesem Device bestimmen, und auch von diesen Werten nur den aktuellsten nehmen.

3. Wenn dieser gefundene Zeitpunkt einen bestimmten Schwellenwert überschreitet (z.B. 24 Stunden), den Status dieses Devices auf inaktiv setzen.

Nun weiss ich nicht, ob das ganze mit einem einzigen SQL-Statement lösbar ist (wahrscheinlich wäre dies ein sehr komplexes Statement), oder ob ich eben in einer Prozedur über bestimmte Result-Sets iterieren muss (evtl. Cursor verwenden?).

Ich habe einfach keine Ahnung, wie ich das ganze angehen soll;( Ich kenne dafür die Werkzeuge von MySQL zu wenig.