SQL if Anweisung

Silent1337

Lieutenant
Registriert
Feb. 2009
Beiträge
1.020
Hallo zusammen,

hänge nun schon etwas länger an der Stelle was MySQL und IF angeht.
Folgendes:

Ich habe 2 Tabellen (Konto1 und Konto2)
Nun soll eine Transaktion von Konto2 auf Konto1 erfolgen - funktioniert ja alles schön und gut.
Jetzt darf Konto2 aber nicht unter 0 landen. Falls doch soll ein rollback; erfolgen.

Code:
SELECT IF(balance > 0, "yes", "no") FROM konto1;

sagt mir ja immerhin ob der Kontostand größer als 0 ist. Nun sollen aber noch entsprechende Anweisungen ausgeführt werden. (Kleiner als 0 = rollback annsonsten Transaktion ausführen)
Hab den Tag über zig Sachen (if, case) Befehle durchprobiert. Nun weiß ich keinen Rat mehr.
 
naja du könntest doch für die komplette Anfrage checken ob min(balance) > 0 ist.. aber um dir mehr helfen zu können, bräuchte man wohl mehr als nur dieses eine Statement...
 
Schau mal in die MySQL-Doku. IF funktioniert lt. Doku von v5.1 anders. Es müßte so gehen:

SELECT IF balance > 0 THEN "yes" ELSE "no" END IF FROM konto1;
 
Danke - werds mal testen :)

EDIT: Dein Syntax funktioniert so leider nicht.
Wie gesagt von mir genannte geht ja wunderbar.
Nur möchte ich statt einem "no" ein Rollback. Select bringt mir da wohl wenig.
 
Zuletzt bearbeitet:
Du musst das in der Programmiersprache machen. Also einfach das Ergebnis der Select-Anfrage prüfen, und dann entsprechend commit/rollback senden.
Alternativ geht es vermutlich auch mit Stored Procedures.
 
Würde es schon in SQL lösen, sonst können andere Clients ja immer noch Dummfug bauen. Was für eine Datenbank benutzt du überhaupt? Stored procedures oder ein "naives" rüberschaufeln von A auf B mit gleichzeitiger Triggerüberwachung wäre z.B. denkbar. aber eigentlich geht es auch ohne das alles wenn du garantieren kannst, dass alle Schritte in einer Transaktion ablaufen.
 
Zuletzt bearbeitet:
Silent1337 schrieb:
Danke - werds mal testen :)

EDIT: Dein Syntax funktioniert so leider nicht.
Wie gesagt von mir genannte geht ja wunderbar.
Nur möchte ich statt einem "no" ein Rollback. Select bringt mir da wohl wenig.

Ach so. Hatte ich überlesen :D

Kann man nicht statt dem "no" eine benutzerdefinierte Funktion aufrufen die das Rollback dann durchführt? Sowas aufzurufen geht im Select, aber ich weiß nicht ob diese Art der Manipulation so möglich ist.
 
Zurück
Oben