Je veux exécuter des commandes SQL généré l'exécution dans une transaction, il n'y a pas de problème, mais je devrais commencer cette transaction si une condition est vrai, par exemple:MySQL: démarrer la transaction si une condition est vraie
SQLText := 'IF (SELECT COUNT(ID) FROM desk_table WHERE Status = 1 AND Number = '
+ IndDeskGrid.DataSource.DataSet.FieldByName('Number').AsString + ' > 0) BEGIN '
+ 'SET autocommit = 0;'
+ 'START TRANSACTION;'
+ 'INSERT INTO waiting_table (UName, DNumber, MDate, HDate, HaveReq)'
+ ' VALUES (' + QuotedStr(User.UName) + ', '
+ IndDeskGrid.DataSource.DataSet.FieldByName('Number').AsString
+ ', ' + QuotedStr(MTodayString) + ', ' + QuotedStr(HTodayString) + ', 2);'
+ 'UPDATE desk_table SET Status = 2 WHERE Number = '
+ IndDeskGrid.DataSource.DataSet.FieldByName('Number').AsString + ';'
+ 'COMMIT;'
+ 'SET autocommit = 1;'
+ 'END;';
SQL généré:
IF (SELECT COUNT(ID) FROM desk_table WHERE Status = 1 AND Number = 202 > 0)
BEGIN
SET autocommit = 0;
START TRANSACTION;
INSERT INTO waiting_table (UName, DNumber, MDate, HDate, HaveReq)
VALUES ('UserName', 202, '2015/09/25', '2015/09/25', 2);
UPDATE desk_table SET Status = 2 WHERE Number = 202;
COMMIT;
SET autocommit = 1;
END;
mais quand je l'utilise si comme code ci-dessus, je suis erreur de syntaxe
J'ai essayé IF..THEN..ENDIF et je suis arrivé même erreur
Comment est-ce que je peux faire cela sans employer des procédures stockées et des paramètres?!
I`m En utilisant UniDAC et Delphi XE6 et MySQL (InnoDB)
... merci
Vous pouvez exécuter la première partie de la requête 'SELECT COUNT (ID) DE desk_table OU Statut = 1 ET ....' et vous pouvez exécuter deuxième partie selon le résultat. Pas dans un SQL. –
Mais je devrais le faire en une seule partie –
Quelle est la raison du début de la transaction conditionnelle? Je ne peux imaginer aucun cas d'utilisation utile pour cela. –