Chris©: MySQL und Stored Procedures und Functions

Beitrag lesen

Hallo Forum,

wir beschäftigen uns seit Tagen um die Wette mit Stored Procedures und Funktions in MySQL.

Nun besteht die Frage, ob zwei Statements in einer Stored Procedure automatisch gebunden sind, oder ob man die Bindung zu einem atomaren Statement erst irgendeiner Maßnahme herstellen muss.

Als Übungsaufgabe haben wir das beliebte Thema "benutzerdefinierte sortierte Ausgabe" genommen. Die Funktionen sind überschaubar, was zum Üben nicht unwichtig ist.

Es gibt bisher die Funktionen bzw. Prozeduren BubbleUp() und BubbleDn(), um einen Datensatz in der Sortierung einen Platz nach oben oder nach unten zu verschieben. Die klappen auch gut, aber es besteht eben die Frage der Sicherheit.

BTW: wie heißt das, wenn man eine Zeitlücke zwischen zwei Statements erzeugt, die eigentlilch nicht sein darf?

Eben um diese Zeitlücke geht es.

Ich poste einfach mal die teile der Prozedur, um die es geht

set @b_id = <id des zu verschiebenden Satzes>

#nach oben rücken
    select a.id_zeit, lfd_nr into @a_id, @a_nr FROM zeit AS a where a.lfd_nr < (select @b_nr:= b.lfd_nr from zeit as b where b.id_zeit = @id) order by a.lfd_nr desc limit 1;
    select @a_id, @a_nr, @b_nr;

#nach unten rücken
    select a.id_zeit, lfd_nr into @a_id, @a_nr FROM zeit AS a where a.lfd_nr > (select @b_nr:= b.lfd_nr from zeit as b where b.id_zeit = @id) order by a.lfd_nr asc limit 1;
    select @a_id, @a_nr, @b_id, @b_nr;

#update ist für beide Richtugnen gleich
    update zeit
    set lfd_nr = if(lfd_nr = @b_nr, @a_nr, @b_nr)
    where lfd_nr in (@a_nr, @b_nr);
    select * from zeit order lfd_nr;

Wir haben versucht, die Selects und das Update in ein Statement zu bringen, aber das ist verboten, da die zu updatende Spalte abgefragt wird.

Nun müssen Selects udn Update irgendwie so zusammengeschweißt werden, dass da kein anderer Prozess dazwischenpasst. Wie muss man das machen?

LG
Chris©