SQL if Anweisung

Silent1337

Lieutenant
Dabei seit
Feb. 2009
Beiträge
995
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.
 

AppLeYArD

Lt. Commander
Dabei seit
Aug. 2005
Beiträge
1.038
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...
 
M

MacGyver

Gast
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;
 

Silent1337

Lieutenant
Ersteller dieses Themas
Dabei seit
Feb. 2009
Beiträge
995
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:

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
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.
 
C

carom

Gast
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:
M

MacGyver

Gast
Zitat von Silent1337:
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.
 
Top